@univer-cli/content-inspection 1.0.0-beta.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.
package/README.md ADDED
@@ -0,0 +1,61 @@
1
+ # @univer-cli/content-inspection
2
+
3
+ English | [简体中文](./README.zh-CN.md)
4
+
5
+ Read stable, structured content information from loaded Univer Units, suitable for CLI, Agent, testing or other automation tools.
6
+
7
+ It supports Sheet, Doc, and Slide. The caller supplies a read-only execution runtime; the package generates and executes a Facade program, then validates the result into a stable inspection model.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ pnpm add @univer-cli/content-inspection
13
+ ```
14
+
15
+ Requires Node.js 22.12 or higher.
16
+
17
+ ## Quick Start
18
+
19
+ ```ts
20
+ import { inspectContent } from "@univer-cli/content-inspection";
21
+
22
+ const result = await inspectContent(
23
+ {
24
+ unitId: lease.unitId,
25
+ unitType: "sheet",
26
+ execute: async (input) => await lease.execute(input),
27
+ },
28
+ { kind: "workbook" },
29
+ );
30
+
31
+ console.log(result);
32
+ ```
33
+
34
+ The runtime only needs to implement this read interface:
35
+
36
+ ```ts
37
+ interface ContentInspectionRuntime {
38
+ readonly unitId: string;
39
+ readonly unitType: "sheet" | "doc" | "slide" | "base" | "board";
40
+ execute(input: { code: string; mode: "read" }): Promise<{ value: JsonValue }>;
41
+ }
42
+ ```
43
+
44
+ A Collaboration Runtime lease can adapt directly to this interface.
45
+
46
+ ## What can be queried?
47
+
48
+ Each Unit has an overview query, which is used to first discover the structure and then launch a more precise query:
49
+
50
+ - Sheet: `workbook` overview, select worksheet by ID/name/index, or read worksheet range;
51
+ - Doc: `document` overview, or select paragraph by ID/index;
52
+ - Slide: `presentation` overview, or select a slide by ID/index.
53
+
54
+ The query is a discriminated union, so TypeScript infers the fields available for each query kind. Results contain only JSON-compatible values for straightforward serialization and cross-process transfer.
55
+
56
+ ## Error model
57
+
58
+ The package distinguishes invalid input, Unit type mismatches, runtime execution failures, and return values that do not conform to the protocol. It exposes `ContentInspectionError` with stable error codes and validates the program envelope returned by the runtime, preventing arbitrary values from being mistaken for inspection results.
59
+
60
+ For the preset command, see
61
+ [`@univer-cli/content-inspection-command`](../content-inspection-command/README.md).
@@ -0,0 +1,65 @@
1
+ # @univer-cli/content-inspection
2
+
3
+ [English](./README.md) | 简体中文
4
+
5
+ 从已经加载的 Univer Unit 中读取稳定、结构化的内容信息,适合 CLI、Agent、测试或其他自动化工具。
6
+
7
+ 支持 Sheet、Doc 和 Slide。调用方提供一个只读 execution runtime;package 生成并执行 Facade
8
+ program,再把结果校验为稳定的 inspection model。
9
+
10
+ ## 安装
11
+
12
+ ```bash
13
+ pnpm add @univer-cli/content-inspection
14
+ ```
15
+
16
+ 要求 Node.js 22.12 或更高版本。
17
+
18
+ ## 快速开始
19
+
20
+ ```ts
21
+ import { inspectContent } from "@univer-cli/content-inspection";
22
+
23
+ const result = await inspectContent(
24
+ {
25
+ unitId: lease.unitId,
26
+ unitType: "sheet",
27
+ execute: async (input) => await lease.execute(input),
28
+ },
29
+ { kind: "workbook" },
30
+ );
31
+
32
+ console.log(result);
33
+ ```
34
+
35
+ Runtime 只需满足以下读取接口:
36
+
37
+ ```ts
38
+ interface ContentInspectionRuntime {
39
+ readonly unitId: string;
40
+ readonly unitType: "sheet" | "doc" | "slide" | "base" | "board";
41
+ execute(input: { code: string; mode: "read" }): Promise<{ value: JsonValue }>;
42
+ }
43
+ ```
44
+
45
+ Collaboration Runtime lease 可以直接适配这个接口。
46
+
47
+ ## 可以查询什么
48
+
49
+ 每种 Unit 都有 overview query,用于先发现结构,再发起更精确的查询:
50
+
51
+ - Sheet:`workbook` overview、按 ID/name/index 选择 worksheet,或读取 worksheet range;
52
+ - Doc:`document` overview,或按 ID/index 选择 paragraph;
53
+ - Slide:`presentation` overview,或按 ID/index 选择 slide。
54
+
55
+ Query 是 discriminated union,具体字段由 TypeScript 自动提示。结果只包含 JSON-compatible value,便于序列化
56
+ 和跨进程传递。
57
+
58
+ ## 错误模型
59
+
60
+ Package 会区分输入非法、Unit 类型不匹配、runtime execution 失败和返回值不符合协议。错误以稳定的
61
+ `ContentInspectionError` 暴露;runtime 返回的 program envelope 也会在边界处校验,避免把任意值误当成
62
+ inspection result。
63
+
64
+ 预设 command 见
65
+ [`@univer-cli/content-inspection-command`](../content-inspection-command/README.zh-CN.md)。
package/dist/index.cjs ADDED
@@ -0,0 +1 @@
1
+ 'use strict';module['exports']=require('./index.mjs');
@@ -0,0 +1,247 @@
1
+ import { ICellData } from "@univerjs/core";
2
+ //#region src/json-value.d.ts
3
+ type JsonValue = null | boolean | number | string | JsonValue[] | {
4
+ readonly [key: string]: JsonValue;
5
+ };
6
+ //#endregion
7
+ //#region src/errors.d.ts
8
+ type ContentInspectionErrorCode = "INSPECTION_RANGE_OUT_OF_BOUNDS" | "INSPECTION_RESULT_INVALID" | "INSPECTION_SELECTOR_AMBIGUOUS" | "INSPECTION_SELECTOR_INVALID" | "INSPECTION_SELECTOR_NOT_FOUND" | "INSPECTION_UNIT_TYPE_MISMATCH";
9
+ declare class ContentInspectionError extends Error {
10
+ readonly code: ContentInspectionErrorCode;
11
+ readonly details?: JsonValue | undefined;
12
+ constructor(code: ContentInspectionErrorCode, message: string, details?: JsonValue | undefined);
13
+ }
14
+ //#endregion
15
+ //#region src/types.d.ts
16
+ type ContentInspectionTarget = "workbook" | "worksheet" | "worksheet-range" | "presentation" | "slide" | "document" | "paragraph";
17
+ type WorksheetSelector = {
18
+ readonly id: string;
19
+ } | {
20
+ readonly index: number;
21
+ } | {
22
+ readonly name: string;
23
+ };
24
+ type SlideSelector = {
25
+ readonly id: string;
26
+ } | {
27
+ readonly index: number;
28
+ };
29
+ type ParagraphSelector = {
30
+ readonly id: string;
31
+ } | {
32
+ readonly index: number;
33
+ };
34
+ interface WorkbookInspectionQuery {
35
+ readonly kind: "workbook";
36
+ }
37
+ interface WorksheetInspectionQuery {
38
+ readonly kind: "worksheet";
39
+ readonly worksheets: readonly [WorksheetSelector, ...WorksheetSelector[]];
40
+ }
41
+ interface WorksheetRangeInspectionQuery {
42
+ readonly kind: "worksheet-range";
43
+ readonly ranges: readonly [{
44
+ readonly range: string;
45
+ readonly worksheet: WorksheetSelector;
46
+ }, ...Array<{
47
+ readonly range: string;
48
+ readonly worksheet: WorksheetSelector;
49
+ }>];
50
+ }
51
+ interface PresentationInspectionQuery {
52
+ readonly kind: "presentation";
53
+ }
54
+ interface SlideInspectionQuery {
55
+ readonly kind: "slide";
56
+ readonly slides: readonly [SlideSelector, ...SlideSelector[]];
57
+ }
58
+ interface DocumentInspectionQuery {
59
+ readonly kind: "document";
60
+ }
61
+ interface ParagraphInspectionQuery {
62
+ readonly kind: "paragraph";
63
+ readonly paragraphs: readonly [ParagraphSelector, ...ParagraphSelector[]];
64
+ }
65
+ type ContentInspectionQuery = WorkbookInspectionQuery | WorksheetInspectionQuery | WorksheetRangeInspectionQuery | PresentationInspectionQuery | SlideInspectionQuery | DocumentInspectionQuery | ParagraphInspectionQuery;
66
+ interface WorksheetIdentity {
67
+ readonly id: string;
68
+ readonly index: number;
69
+ readonly name: string;
70
+ }
71
+ interface WorksheetTableSummary {
72
+ readonly id: string;
73
+ readonly name: string;
74
+ readonly range: string;
75
+ }
76
+ interface WorksheetRuleSummary {
77
+ readonly count: number;
78
+ readonly ranges: readonly string[];
79
+ }
80
+ interface WorksheetDrawingSummary {
81
+ readonly charts: number;
82
+ readonly images: number;
83
+ readonly shapes: number;
84
+ readonly total: number;
85
+ }
86
+ interface WorksheetOverview extends WorksheetIdentity {
87
+ readonly columnCount: number;
88
+ readonly conditionalFormatting: WorksheetRuleSummary;
89
+ readonly dataValidation: WorksheetRuleSummary;
90
+ readonly drawings: WorksheetDrawingSummary;
91
+ readonly formulaUsedRanges: readonly string[];
92
+ readonly mergedRanges: readonly string[];
93
+ readonly rowCount: number;
94
+ readonly styleUsedRanges: readonly string[];
95
+ readonly tables: readonly WorksheetTableSummary[];
96
+ readonly valueUsedRanges: readonly string[];
97
+ }
98
+ interface WorkbookInspectionResult {
99
+ readonly kind: "workbook";
100
+ readonly name: string;
101
+ readonly unitId: string;
102
+ readonly worksheets: readonly WorksheetOverview[];
103
+ }
104
+ interface WorksheetInspectionResult {
105
+ readonly kind: "worksheet";
106
+ readonly unitId: string;
107
+ readonly worksheets: readonly WorksheetOverview[];
108
+ }
109
+ interface WorksheetRangeResult {
110
+ readonly cellData: readonly (readonly (ICellData | null)[])[];
111
+ readonly clipped: boolean;
112
+ readonly displayValues: readonly (readonly string[])[];
113
+ readonly requestedRange: string;
114
+ readonly resolvedRange: string;
115
+ readonly worksheet: WorksheetIdentity;
116
+ }
117
+ interface WorksheetRangeInspectionResult {
118
+ readonly kind: "worksheet-range";
119
+ readonly ranges: readonly WorksheetRangeResult[];
120
+ readonly unitId: string;
121
+ }
122
+ interface PresentationSize {
123
+ readonly height: number;
124
+ readonly width: number;
125
+ }
126
+ interface SlideElementCounts {
127
+ readonly charts: number;
128
+ readonly groups: number;
129
+ readonly images: number;
130
+ readonly shapes: number;
131
+ readonly tables: number;
132
+ readonly text: number;
133
+ readonly total: number;
134
+ }
135
+ interface SlideSummary {
136
+ readonly elementCounts: SlideElementCounts;
137
+ readonly hasSpeakerNotes: boolean;
138
+ readonly id: string;
139
+ readonly index: number;
140
+ readonly name: string;
141
+ readonly textPreview?: string;
142
+ }
143
+ interface PresentationInspectionResult {
144
+ readonly kind: "presentation";
145
+ readonly layoutSlideCount: number;
146
+ readonly masterSlideCount: number;
147
+ readonly name: string;
148
+ readonly size: PresentationSize;
149
+ readonly slides: readonly SlideSummary[];
150
+ readonly unitId: string;
151
+ }
152
+ interface SlideElementTransform {
153
+ readonly angle?: number;
154
+ readonly height?: number;
155
+ readonly left?: number;
156
+ readonly top?: number;
157
+ readonly width?: number;
158
+ }
159
+ interface SlideTextDetails {
160
+ readonly alignment?: JsonValue;
161
+ readonly insets?: JsonValue;
162
+ readonly text: string;
163
+ }
164
+ interface SlideElementInspection {
165
+ readonly chartId?: string;
166
+ readonly children?: readonly SlideElementInspection[];
167
+ readonly fill?: JsonValue;
168
+ readonly id: string;
169
+ readonly mediaType?: string;
170
+ readonly name: string;
171
+ readonly stroke?: JsonValue;
172
+ readonly tableId?: string;
173
+ readonly tableText?: readonly (readonly string[])[];
174
+ readonly text?: SlideTextDetails;
175
+ readonly transform?: SlideElementTransform;
176
+ readonly type: string;
177
+ readonly visible: boolean;
178
+ }
179
+ interface SlideInspectionDetails extends SlideSummary {
180
+ readonly elements: readonly SlideElementInspection[];
181
+ readonly speakerNotes: string;
182
+ }
183
+ interface SlideInspectionResult {
184
+ readonly kind: "slide";
185
+ readonly slides: readonly SlideInspectionDetails[];
186
+ readonly unitId: string;
187
+ }
188
+ interface DocumentFeatureCounts {
189
+ readonly blockRanges: number;
190
+ readonly customBlocks: number;
191
+ readonly drawings: number;
192
+ readonly lists: number;
193
+ readonly tables: number;
194
+ }
195
+ interface ParagraphSummary {
196
+ readonly id: string;
197
+ readonly index: number;
198
+ readonly textPreview: string;
199
+ }
200
+ interface DocumentInspectionResult {
201
+ readonly characterCount: number;
202
+ readonly features: DocumentFeatureCounts;
203
+ readonly kind: "document";
204
+ readonly mode: "modern" | "paginated" | "unspecified";
205
+ readonly paragraphCount: number;
206
+ readonly paragraphs: readonly ParagraphSummary[];
207
+ readonly title: string;
208
+ readonly unitId: string;
209
+ }
210
+ interface ParagraphInspectionDetails {
211
+ readonly bullet?: JsonValue;
212
+ readonly id: string;
213
+ readonly index: number;
214
+ readonly list?: JsonValue;
215
+ readonly style?: JsonValue;
216
+ readonly text: string;
217
+ readonly textRuns: readonly JsonValue[];
218
+ }
219
+ interface ParagraphInspectionResult {
220
+ readonly kind: "paragraph";
221
+ readonly paragraphs: readonly ParagraphInspectionDetails[];
222
+ readonly unitId: string;
223
+ }
224
+ type ContentInspectionResult = WorkbookInspectionResult | WorksheetInspectionResult | WorksheetRangeInspectionResult | PresentationInspectionResult | SlideInspectionResult | DocumentInspectionResult | ParagraphInspectionResult;
225
+ //#endregion
226
+ //#region src/inspect-content.d.ts
227
+ type ContentInspectionUnitType = "sheet" | "doc" | "slide" | "base" | "board";
228
+ interface ContentInspectionRuntime {
229
+ readonly unitId: string;
230
+ readonly unitType: ContentInspectionUnitType;
231
+ execute(input: {
232
+ readonly code: string;
233
+ readonly mode: "read";
234
+ }): Promise<{
235
+ readonly value: JsonValue;
236
+ }>;
237
+ }
238
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: WorkbookInspectionQuery): Promise<WorkbookInspectionResult>;
239
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: WorksheetInspectionQuery): Promise<WorksheetInspectionResult>;
240
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: WorksheetRangeInspectionQuery): Promise<WorksheetRangeInspectionResult>;
241
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: PresentationInspectionQuery): Promise<PresentationInspectionResult>;
242
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: SlideInspectionQuery): Promise<SlideInspectionResult>;
243
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: DocumentInspectionQuery): Promise<DocumentInspectionResult>;
244
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: ParagraphInspectionQuery): Promise<ParagraphInspectionResult>;
245
+ declare function inspectContent(runtime: ContentInspectionRuntime, query: ContentInspectionQuery): Promise<ContentInspectionResult>;
246
+ //#endregion
247
+ export { ContentInspectionError, type ContentInspectionErrorCode, type ContentInspectionQuery, type ContentInspectionResult, type ContentInspectionRuntime, type ContentInspectionTarget, type ContentInspectionUnitType, type DocumentFeatureCounts, type DocumentInspectionQuery, type DocumentInspectionResult, type ParagraphInspectionDetails, type ParagraphInspectionQuery, type ParagraphInspectionResult, type ParagraphSelector, type ParagraphSummary, type PresentationInspectionQuery, type PresentationInspectionResult, type PresentationSize, type SlideElementCounts, type SlideElementInspection, type SlideElementTransform, type SlideInspectionDetails, type SlideInspectionQuery, type SlideInspectionResult, type SlideSelector, type SlideSummary, type SlideTextDetails, type WorkbookInspectionQuery, type WorkbookInspectionResult, type WorksheetDrawingSummary, type WorksheetIdentity, type WorksheetInspectionQuery, type WorksheetInspectionResult, type WorksheetOverview, type WorksheetRangeInspectionQuery, type WorksheetRangeInspectionResult, type WorksheetRangeResult, type WorksheetRuleSummary, type WorksheetSelector, type WorksheetTableSummary, inspectContent };
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ const _0x4bd1fa=_0x75d7;(function(_0x4abf20,_0x3926ed){const _0x39556d=_0x75d7,_0x255a0c=_0x4abf20();while(!![]){try{const _0x203503=parseInt(_0x39556d(0x177))/0x1*(parseInt(_0x39556d(0x174))/0x2)+-parseInt(_0x39556d(0x18c))/0x3*(-parseInt(_0x39556d(0x176))/0x4)+parseInt(_0x39556d(0x192))/0x5+-parseInt(_0x39556d(0x181))/0x6+parseInt(_0x39556d(0x17e))/0x7+-parseInt(_0x39556d(0x1a2))/0x8*(parseInt(_0x39556d(0x188))/0x9)+parseInt(_0x39556d(0x18b))/0xa*(-parseInt(_0x39556d(0x1a4))/0xb);if(_0x203503===_0x3926ed)break;else _0x255a0c['push'](_0x255a0c['shift']());}catch(_0x146db2){_0x255a0c['push'](_0x255a0c['shift']());}}}(_0x28c3,0x31220));var e=class extends Error{[_0x4bd1fa(0x194)];['details'];constructor(_0x2517c6,_0x337bd2,_0xe5209c){const _0x5ea319=_0x4bd1fa;super(_0x337bd2),this[_0x5ea319(0x194)]=_0x2517c6,this[_0x5ea319(0x198)]=_0xe5209c,this['name']=_0x5ea319(0x189);}};function t(_0x43739a){const _0x3fc592=_0x4bd1fa;if(!i(_0x43739a)||typeof _0x43739a['ok']!=_0x3fc592(0x19c))throw r('Inspection\x20runtime\x20returned\x20an\x20invalid\x20envelope');if(_0x43739a['ok']===!0x0&&_0x3fc592(0x196)in _0x43739a)return _0x43739a[_0x3fc592(0x196)];let _0x238e1c=_0x43739a['error'];if(_0x43739a['ok']===!0x1&&i(_0x238e1c)){let _0x104b14=_0x238e1c[_0x3fc592(0x194)],_0x2fb2a7=_0x238e1c[_0x3fc592(0x17a)];if(a(_0x104b14)&&typeof _0x2fb2a7==_0x3fc592(0x18d))throw new e(_0x104b14,_0x2fb2a7,_0x238e1c[_0x3fc592(0x198)]);}throw r(_0x3fc592(0x180));}function n(_0x2ed17d,_0x545996){const _0x134d0e=_0x4bd1fa;if(!i(_0x2ed17d)||_0x2ed17d[_0x134d0e(0x18e)]!==_0x545996||typeof _0x2ed17d['unitId']!=_0x134d0e(0x18d)||!(_0x545996===_0x134d0e(0x185)?typeof _0x2ed17d[_0x134d0e(0x19a)]==_0x134d0e(0x18d)&&Array[_0x134d0e(0x182)](_0x2ed17d[_0x134d0e(0x197)]):_0x545996===_0x134d0e(0x187)?Array[_0x134d0e(0x182)](_0x2ed17d[_0x134d0e(0x197)]):_0x545996===_0x134d0e(0x184)?Array['isArray'](_0x2ed17d[_0x134d0e(0x183)]):_0x545996===_0x134d0e(0x19b)?typeof _0x2ed17d[_0x134d0e(0x19a)]==_0x134d0e(0x18d)&&Array[_0x134d0e(0x182)](_0x2ed17d[_0x134d0e(0x172)]):_0x545996===_0x134d0e(0x1a3)?Array[_0x134d0e(0x182)](_0x2ed17d['slides']):_0x545996===_0x134d0e(0x19d)?typeof _0x2ed17d['title']==_0x134d0e(0x18d)&&Array[_0x134d0e(0x182)](_0x2ed17d[_0x134d0e(0x19f)]):_0x545996===_0x134d0e(0x17f)&&Array[_0x134d0e(0x182)](_0x2ed17d[_0x134d0e(0x19f)])))throw r('Inspection\x20runtime\x20returned\x20an\x20invalid\x20'+_0x545996+_0x134d0e(0x190));}function r(_0x40577d){const _0x350e83=_0x4bd1fa;return new e(_0x350e83(0x179),_0x40577d);}function i(_0x843842){const _0x4a31a8=_0x4bd1fa;return typeof _0x843842==_0x4a31a8(0x19e)&&!!_0x843842&&!Array['isArray'](_0x843842);}function a(_0x22a22f){const _0x5b23ac=_0x4bd1fa;return _0x22a22f===_0x5b23ac(0x199)||_0x22a22f===_0x5b23ac(0x179)||_0x22a22f===_0x5b23ac(0x18f)||_0x22a22f==='INSPECTION_SELECTOR_INVALID'||_0x22a22f===_0x5b23ac(0x18a)||_0x22a22f===_0x5b23ac(0x178);}function o(_0x1642eb,_0x81098a){const _0x5e0828=_0x4bd1fa;return _0x5e0828(0x17b)+JSON[_0x5e0828(0x17c)]({'query':_0x81098a,'unitId':_0x1642eb})+_0x5e0828(0x17d);}function s(_0x39ba09,_0x44e7c1){return'\x0aconst\x20input\x20=\x20'+JSON['stringify']({'query':_0x44e7c1,'unitId':_0x39ba09})+';\x0aconst\x20fail\x20=\x20(code,\x20message,\x20details)\x20=>\x20({\x20ok:\x20false,\x20error:\x20{\x20code,\x20message,\x20...(details\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20details\x20})\x20}\x20});\x0aconst\x20success\x20=\x20(value)\x20=>\x20({\x20ok:\x20true,\x20value\x20});\x0aconst\x20workbook\x20=\x20univerAPI.getWorkbook(input.unitId);\x0aif\x20(!workbook)\x20return\x20fail(\x22INSPECTION_RESULT_INVALID\x22,\x20\x22Workbook\x20\x22\x20+\x20input.unitId\x20+\x20\x22\x20is\x20not\x20available\x20in\x20the\x20runtime\x22);\x0aconst\x20sheets\x20=\x20workbook.getSheets();\x0aconst\x20snapshot\x20=\x20workbook.save();\x0a\x0afunction\x20columnName(column)\x20{\x0a\x20\x20let\x20value\x20=\x20column\x20+\x201;\x0a\x20\x20let\x20name\x20=\x20\x22\x22;\x0a\x20\x20while\x20(value\x20>\x200)\x20{\x0a\x20\x20\x20\x20const\x20remainder\x20=\x20(value\x20-\x201)\x20%\x2026;\x0a\x20\x20\x20\x20name\x20=\x20String.fromCharCode(65\x20+\x20remainder)\x20+\x20name;\x0a\x20\x20\x20\x20value\x20=\x20Math.floor((value\x20-\x201)\x20/\x2026);\x0a\x20\x20}\x0a\x20\x20return\x20name;\x0a}\x0a\x0afunction\x20rangeNotation(range)\x20{\x0a\x20\x20const\x20start\x20=\x20columnName(range.startColumn)\x20+\x20String(range.startRow\x20+\x201);\x0a\x20\x20const\x20end\x20=\x20columnName(range.endColumn)\x20+\x20String(range.endRow\x20+\x201);\x0a\x20\x20return\x20start\x20===\x20end\x20?\x20start\x20:\x20start\x20+\x20\x22:\x22\x20+\x20end;\x0a}\x0a\x0afunction\x20parseA1Range(notation)\x20{\x0a\x20\x20const\x20match\x20=\x20/^\x5c$?([A-Za-z]+)\x5c$?(\x5cd+)(?::\x5c$?([A-Za-z]+)\x5c$?(\x5cd+))?$/.exec(notation);\x0a\x20\x20if\x20(!match)\x20return\x20null;\x0a\x20\x20const\x20columnIndex\x20=\x20(name)\x20=>\x20{\x0a\x20\x20\x20\x20let\x20column\x20=\x200;\x0a\x20\x20\x20\x20for\x20(const\x20character\x20of\x20name.toUpperCase())\x20column\x20=\x20column\x20*\x2026\x20+\x20character.charCodeAt(0)\x20-\x2064;\x0a\x20\x20\x20\x20return\x20column\x20-\x201;\x0a\x20\x20};\x0a\x20\x20const\x20startColumn\x20=\x20columnIndex(match[1]);\x0a\x20\x20const\x20startRow\x20=\x20Number(match[2])\x20-\x201;\x0a\x20\x20const\x20endColumn\x20=\x20columnIndex(match[3]\x20||\x20match[1]);\x0a\x20\x20const\x20endRow\x20=\x20Number(match[4]\x20||\x20match[2])\x20-\x201;\x0a\x20\x20if\x20(!Number.isSafeInteger(startRow)\x20||\x20!Number.isSafeInteger(endRow)\x20||\x20startRow\x20<\x200\x20||\x20endRow\x20<\x20startRow\x20||\x20endColumn\x20<\x20startColumn)\x20return\x20null;\x0a\x20\x20return\x20{\x20startRow,\x20endRow,\x20startColumn,\x20endColumn\x20};\x0a}\x0a\x0afunction\x20normalizeCellData(cellData)\x20{\x0a\x20\x20const\x20cells\x20=\x20[];\x0a\x20\x20for\x20(const\x20[rowKey,\x20columns]\x20of\x20Object.entries(cellData\x20||\x20{}))\x20{\x0a\x20\x20\x20\x20const\x20row\x20=\x20Number(rowKey);\x0a\x20\x20\x20\x20if\x20(!Number.isInteger(row)\x20||\x20!columns\x20||\x20typeof\x20columns\x20!==\x20\x22object\x22)\x20continue;\x0a\x20\x20\x20\x20for\x20(const\x20[columnKey,\x20cell]\x20of\x20Object.entries(columns))\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20column\x20=\x20Number(columnKey);\x0a\x20\x20\x20\x20\x20\x20if\x20(Number.isInteger(column)\x20&&\x20cell\x20&&\x20typeof\x20cell\x20===\x20\x22object\x22)\x20cells.push({\x20row,\x20column,\x20cell\x20});\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20cells.sort((left,\x20right)\x20=>\x20left.row\x20-\x20right.row\x20||\x20left.column\x20-\x20right.column);\x0a\x20\x20return\x20cells;\x0a}\x0a\x0a//\x20TODO:\x20profile\x20large\x20sparse\x20worksheets\x20and\x20move\x20this\x20scan\x20behind\x20an\x20incremental\x20index\x20if\x20needed.\x0afunction\x20compactUsedRanges(cells,\x20predicate)\x20{\x0a\x20\x20const\x20horizontal\x20=\x20[];\x0a\x20\x20let\x20active\x20=\x20null;\x0a\x20\x20for\x20(const\x20entry\x20of\x20cells)\x20{\x0a\x20\x20\x20\x20if\x20(!predicate(entry.cell))\x20continue;\x0a\x20\x20\x20\x20if\x20(active\x20&&\x20active.startRow\x20===\x20entry.row\x20&&\x20active.endColumn\x20+\x201\x20===\x20entry.column)\x20{\x0a\x20\x20\x20\x20\x20\x20active.endColumn\x20=\x20entry.column;\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20active\x20=\x20{\x20startRow:\x20entry.row,\x20endRow:\x20entry.row,\x20startColumn:\x20entry.column,\x20endColumn:\x20entry.column\x20};\x0a\x20\x20\x20\x20\x20\x20horizontal.push(active);\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20const\x20rectangles\x20=\x20[];\x0a\x20\x20const\x20previousRow\x20=\x20new\x20Map();\x0a\x20\x20let\x20currentRow\x20=\x20-1;\x0a\x20\x20let\x20current\x20=\x20new\x20Map();\x0a\x20\x20for\x20(const\x20span\x20of\x20horizontal)\x20{\x0a\x20\x20\x20\x20if\x20(span.startRow\x20!==\x20currentRow)\x20{\x0a\x20\x20\x20\x20\x20\x20previousRow.clear();\x0a\x20\x20\x20\x20\x20\x20for\x20(const\x20[key,\x20value]\x20of\x20current)\x20previousRow.set(key,\x20value);\x0a\x20\x20\x20\x20\x20\x20current\x20=\x20new\x20Map();\x0a\x20\x20\x20\x20\x20\x20currentRow\x20=\x20span.startRow;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20const\x20key\x20=\x20span.startColumn\x20+\x20\x22:\x22\x20+\x20span.endColumn;\x0a\x20\x20\x20\x20const\x20prior\x20=\x20previousRow.get(key);\x0a\x20\x20\x20\x20if\x20(prior\x20&&\x20prior.endRow\x20+\x201\x20===\x20span.startRow)\x20{\x0a\x20\x20\x20\x20\x20\x20prior.endRow\x20=\x20span.startRow;\x0a\x20\x20\x20\x20\x20\x20current.set(key,\x20prior);\x0a\x20\x20\x20\x20}\x20else\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20rectangle\x20=\x20{\x20...span\x20};\x0a\x20\x20\x20\x20\x20\x20rectangles.push(rectangle);\x0a\x20\x20\x20\x20\x20\x20current.set(key,\x20rectangle);\x0a\x20\x20\x20\x20}\x0a\x20\x20}\x0a\x20\x20return\x20rectangles.map(rangeNotation);\x0a}\x0a\x0afunction\x20hasValue(cell)\x20{\x0a\x20\x20return\x20Object.entries(cell).some(([key,\x20value])\x20=>\x20key\x20!==\x20\x22s\x22\x20&&\x20key\x20!==\x20\x22t\x22\x20&&\x20value\x20!==\x20null\x20&&\x20value\x20!==\x20undefined\x20&&\x20value\x20!==\x20\x22\x22);\x0a}\x0a\x0afunction\x20hasFormula(cell)\x20{\x0a\x20\x20return\x20(typeof\x20cell.f\x20===\x20\x22string\x22\x20&&\x20cell.f.length\x20>\x200)\x20||\x20cell.si\x20!==\x20null\x20&&\x20cell.si\x20!==\x20undefined\x20&&\x20cell.si\x20!==\x20\x22\x22;\x0a}\x0a\x0afunction\x20hasStyle(cell)\x20{\x0a\x20\x20return\x20cell.s\x20!==\x20null\x20&&\x20cell.s\x20!==\x20undefined;\x0a}\x0a\x0afunction\x20uniqueRanges(ranges)\x20{\x0a\x20\x20return\x20[...new\x20Set(ranges.map(rangeNotation))].sort();\x0a}\x0a\x0afunction\x20worksheetIdentity(sheet,\x20index)\x20{\x0a\x20\x20return\x20{\x20id:\x20sheet.getSheetId(),\x20index,\x20name:\x20sheet.getSheetName()\x20};\x0a}\x0a\x0afunction\x20worksheetOverview(sheet,\x20index)\x20{\x0a\x20\x20const\x20identity\x20=\x20worksheetIdentity(sheet,\x20index);\x0a\x20\x20const\x20sheetData\x20=\x20snapshot.sheets\x20&&\x20snapshot.sheets[identity.id]\x20||\x20{};\x0a\x20\x20const\x20cells\x20=\x20normalizeCellData(sheetData.cellData);\x0a\x20\x20const\x20conditionalRules\x20=\x20typeof\x20sheet.getConditionalFormattingRules\x20===\x20\x22function\x22\x20?\x20sheet.getConditionalFormattingRules()\x20:\x20[];\x0a\x20\x20const\x20validationRules\x20=\x20typeof\x20sheet.getDataValidations\x20===\x20\x22function\x22\x20?\x20sheet.getDataValidations()\x20:\x20[];\x0a\x20\x20const\x20tables\x20=\x20typeof\x20sheet.getSubTableInfos\x20===\x20\x22function\x22\x20?\x20sheet.getSubTableInfos()\x20:\x20[];\x0a\x20\x20const\x20images\x20=\x20typeof\x20sheet.getImages\x20===\x20\x22function\x22\x20?\x20sheet.getImages().length\x20:\x200;\x0a\x20\x20const\x20shapes\x20=\x20typeof\x20sheet.getShapes\x20===\x20\x22function\x22\x20?\x20sheet.getShapes().length\x20:\x200;\x0a\x20\x20const\x20charts\x20=\x20sheet.charts\x20&&\x20typeof\x20sheet.charts.list\x20===\x20\x22function\x22\x20?\x20sheet.charts.list().length\x20:\x200;\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20...identity,\x0a\x20\x20\x20\x20rowCount:\x20sheet.getMaxRows(),\x0a\x20\x20\x20\x20columnCount:\x20sheet.getMaxColumns(),\x0a\x20\x20\x20\x20valueUsedRanges:\x20compactUsedRanges(cells,\x20hasValue),\x0a\x20\x20\x20\x20formulaUsedRanges:\x20compactUsedRanges(cells,\x20hasFormula),\x0a\x20\x20\x20\x20styleUsedRanges:\x20compactUsedRanges(cells,\x20hasStyle),\x0a\x20\x20\x20\x20mergedRanges:\x20sheet.getMergedRanges().map((range)\x20=>\x20range.getA1Notation()),\x0a\x20\x20\x20\x20tables:\x20tables.map((table)\x20=>\x20({\x20id:\x20table.id,\x20name:\x20table.name,\x20range:\x20rangeNotation(table.range)\x20})),\x0a\x20\x20\x20\x20conditionalFormatting:\x20{\x0a\x20\x20\x20\x20\x20\x20count:\x20conditionalRules.length,\x0a\x20\x20\x20\x20\x20\x20ranges:\x20uniqueRanges(conditionalRules.flatMap((rule)\x20=>\x20Array.isArray(rule.ranges)\x20?\x20rule.ranges\x20:\x20[])),\x0a\x20\x20\x20\x20},\x0a\x20\x20\x20\x20dataValidation:\x20{\x0a\x20\x20\x20\x20\x20\x20count:\x20validationRules.length,\x0a\x20\x20\x20\x20\x20\x20ranges:\x20uniqueRanges(validationRules.flatMap((validation)\x20=>\x20Array.isArray(validation.rule\x20&&\x20validation.rule.ranges)\x20?\x20validation.rule.ranges\x20:\x20[])),\x0a\x20\x20\x20\x20},\x0a\x20\x20\x20\x20drawings:\x20{\x20total:\x20charts\x20+\x20images\x20+\x20shapes,\x20charts,\x20images,\x20shapes\x20},\x0a\x20\x20};\x0a}\x0a\x0afunction\x20resolveWorksheet(selector)\x20{\x0a\x20\x20if\x20(!selector\x20||\x20typeof\x20selector\x20!==\x20\x22object\x22)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Worksheet\x20selector\x20must\x20be\x20an\x20object\x22)\x20};\x0a\x20\x20const\x20keys\x20=\x20[\x22id\x22,\x20\x22index\x22,\x20\x22name\x22].filter((key)\x20=>\x20Object.hasOwn(selector,\x20key));\x0a\x20\x20if\x20(keys.length\x20!==\x201)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Worksheet\x20selector\x20must\x20contain\x20exactly\x20one\x20of\x20id,\x20index,\x20or\x20name\x22,\x20selector)\x20};\x0a\x20\x20let\x20matches\x20=\x20[];\x0a\x20\x20if\x20(keys[0]\x20===\x20\x22id\x22\x20&&\x20typeof\x20selector.id\x20===\x20\x22string\x22\x20&&\x20selector.id.length\x20>\x200)\x20matches\x20=\x20sheets.filter((sheet)\x20=>\x20sheet.getSheetId()\x20===\x20selector.id);\x0a\x20\x20else\x20if\x20(keys[0]\x20===\x20\x22name\x22\x20&&\x20typeof\x20selector.name\x20===\x20\x22string\x22\x20&&\x20selector.name.length\x20>\x200)\x20matches\x20=\x20sheets.filter((sheet)\x20=>\x20sheet.getSheetName()\x20===\x20selector.name);\x0a\x20\x20else\x20if\x20(keys[0]\x20===\x20\x22index\x22\x20&&\x20Number.isInteger(selector.index)\x20&&\x20selector.index\x20>=\x200)\x20matches\x20=\x20sheets[selector.index]\x20?\x20[sheets[selector.index]]\x20:\x20[];\x0a\x20\x20else\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Worksheet\x20selector\x20value\x20is\x20invalid\x22,\x20selector)\x20};\x0a\x20\x20if\x20(matches.length\x20===\x200)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_NOT_FOUND\x22,\x20\x22Worksheet\x20selector\x20did\x20not\x20match\x20a\x20worksheet\x22,\x20selector)\x20};\x0a\x20\x20if\x20(matches.length\x20>\x201)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_AMBIGUOUS\x22,\x20\x22Worksheet\x20selector\x20matched\x20more\x20than\x20one\x20worksheet\x22,\x20selector)\x20};\x0a\x20\x20const\x20sheet\x20=\x20matches[0];\x0a\x20\x20return\x20{\x20sheet,\x20index:\x20sheets.indexOf(sheet)\x20};\x0a}\x0a\x0aif\x20(input.query.kind\x20===\x20\x22workbook\x22)\x20{\x0a\x20\x20return\x20success({\x20kind:\x20\x22workbook\x22,\x20unitId:\x20input.unitId,\x20name:\x20workbook.getName(),\x20worksheets:\x20sheets.map(worksheetOverview)\x20});\x0a}\x0a\x0aif\x20(input.query.kind\x20===\x20\x22worksheet\x22)\x20{\x0a\x20\x20const\x20resolved\x20=\x20[];\x0a\x20\x20for\x20(const\x20selector\x20of\x20input.query.worksheets\x20||\x20[])\x20{\x0a\x20\x20\x20\x20const\x20item\x20=\x20resolveWorksheet(selector);\x0a\x20\x20\x20\x20if\x20(item.error)\x20return\x20item.error;\x0a\x20\x20\x20\x20resolved.push(worksheetOverview(item.sheet,\x20item.index));\x0a\x20\x20}\x0a\x20\x20return\x20success({\x20kind:\x20\x22worksheet\x22,\x20unitId:\x20input.unitId,\x20worksheets:\x20resolved\x20});\x0a}\x0a\x0aif\x20(input.query.kind\x20===\x20\x22worksheet-range\x22)\x20{\x0a\x20\x20const\x20resolved\x20=\x20[];\x0a\x20\x20for\x20(const\x20request\x20of\x20input.query.ranges\x20||\x20[])\x20{\x0a\x20\x20\x20\x20const\x20item\x20=\x20resolveWorksheet(request.worksheet);\x0a\x20\x20\x20\x20if\x20(item.error)\x20return\x20item.error;\x0a\x20\x20\x20\x20if\x20(typeof\x20request.range\x20!==\x20\x22string\x22\x20||\x20request.range.length\x20===\x200)\x20return\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Worksheet\x20range\x20must\x20be\x20a\x20non-empty\x20A1\x20notation\x22,\x20request);\x0a\x20\x20\x20\x20const\x20parsed\x20=\x20parseA1Range(request.range);\x0a\x20\x20\x20\x20if\x20(!parsed)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Invalid\x20worksheet\x20A1\x20range:\x20\x22\x20+\x20request.range,\x20request);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20const\x20maxRow\x20=\x20item.sheet.getMaxRows()\x20-\x201;\x0a\x20\x20\x20\x20const\x20maxColumn\x20=\x20item.sheet.getMaxColumns()\x20-\x201;\x0a\x20\x20\x20\x20if\x20(parsed.endRow\x20<\x200\x20||\x20parsed.endColumn\x20<\x200\x20||\x20parsed.startRow\x20>\x20maxRow\x20||\x20parsed.startColumn\x20>\x20maxColumn)\x20{\x0a\x20\x20\x20\x20\x20\x20return\x20fail(\x22INSPECTION_RANGE_OUT_OF_BOUNDS\x22,\x20\x22Worksheet\x20range\x20is\x20outside\x20the\x20worksheet\x20bounds:\x20\x22\x20+\x20request.range,\x20request);\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20const\x20clippedRange\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20startRow:\x20Math.max(0,\x20parsed.startRow),\x0a\x20\x20\x20\x20\x20\x20endRow:\x20Math.min(maxRow,\x20parsed.endRow),\x0a\x20\x20\x20\x20\x20\x20startColumn:\x20Math.max(0,\x20parsed.startColumn),\x0a\x20\x20\x20\x20\x20\x20endColumn:\x20Math.min(maxColumn,\x20parsed.endColumn),\x0a\x20\x20\x20\x20};\x0a\x20\x20\x20\x20const\x20facadeRange\x20=\x20item.sheet.getRange(clippedRange.startRow,\x20clippedRange.startColumn,\x20clippedRange.endRow\x20-\x20clippedRange.startRow\x20+\x201,\x20clippedRange.endColumn\x20-\x20clippedRange.startColumn\x20+\x201);\x0a\x20\x20\x20\x20const\x20rawCells\x20=\x20facadeRange.getCellDatas();\x0a\x20\x20\x20\x20const\x20displayValues\x20=\x20facadeRange.getDisplayValues();\x0a\x20\x20\x20\x20const\x20cellData\x20=\x20rawCells.map((row)\x20=>\x20row.map((cell)\x20=>\x20cell\x20===\x20undefined\x20?\x20null\x20:\x20cell));\x0a\x20\x20\x20\x20const\x20clipped\x20=\x20clippedRange.startRow\x20!==\x20parsed.startRow\x20||\x20clippedRange.endRow\x20!==\x20parsed.endRow\x20||\x20clippedRange.startColumn\x20!==\x20parsed.startColumn\x20||\x20clippedRange.endColumn\x20!==\x20parsed.endColumn;\x0a\x20\x20\x20\x20resolved.push({\x0a\x20\x20\x20\x20\x20\x20worksheet:\x20worksheetIdentity(item.sheet,\x20item.index),\x0a\x20\x20\x20\x20\x20\x20requestedRange:\x20request.range,\x0a\x20\x20\x20\x20\x20\x20resolvedRange:\x20rangeNotation(clippedRange),\x0a\x20\x20\x20\x20\x20\x20clipped,\x0a\x20\x20\x20\x20\x20\x20cellData,\x0a\x20\x20\x20\x20\x20\x20displayValues,\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x20\x20return\x20success({\x20kind:\x20\x22worksheet-range\x22,\x20unitId:\x20input.unitId,\x20ranges:\x20resolved\x20});\x0a}\x0a\x0areturn\x20fail(\x22INSPECTION_RESULT_INVALID\x22,\x20\x22Unsupported\x20sheet\x20inspection\x20target\x22);\x0a';}function _0x75d7(_0xba3f3c,_0x33e9f9){_0xba3f3c=_0xba3f3c-0x172;const _0x28c3d7=_0x28c3();let _0x75d776=_0x28c3d7[_0xba3f3c];return _0x75d776;}function _0x28c3(){const _0x589434=['workbook','sheet','worksheet','63wtnRcW','ContentInspectionError','INSPECTION_SELECTOR_NOT_FOUND','10vAOsak','21ERVnvv','string','kind','INSPECTION_SELECTOR_AMBIGUOUS','\x20result','length','166690RjnlHc','execute','code','INSPECTION_SELECTOR_INVALID','value','worksheets','details','INSPECTION_RANGE_OUT_OF_BOUNDS','name','presentation','boolean','document','object','paragraphs','doc','\x20inspection\x20requires\x20at\x20least\x20one\x20selector','50216fRPOck','slide','287771CIdvde','slides','\x20runtime,\x20received\x20','880iaDqpW','unitType','197452ysubfD','167vtdsbs','INSPECTION_UNIT_TYPE_MISMATCH','INSPECTION_RESULT_INVALID','message','\x0aconst\x20input\x20=\x20','stringify',';\x0aconst\x20fail\x20=\x20(code,\x20message,\x20details)\x20=>\x20({\x20ok:\x20false,\x20error:\x20{\x20code,\x20message,\x20...(details\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20details\x20})\x20}\x20});\x0aconst\x20success\x20=\x20(value)\x20=>\x20({\x20ok:\x20true,\x20value\x20});\x0aconst\x20document\x20=\x20univerAPI.getDocument(input.unitId);\x0aif\x20(!document)\x20return\x20fail(\x22INSPECTION_RESULT_INVALID\x22,\x20\x22Document\x20\x22\x20+\x20input.unitId\x20+\x20\x22\x20is\x20not\x20available\x20in\x20the\x20runtime\x22);\x0aconst\x20snapshot\x20=\x20document.save();\x0aconst\x20body\x20=\x20snapshot.body\x20||\x20{};\x0aconst\x20stream\x20=\x20typeof\x20body.dataStream\x20===\x20\x22string\x22\x20?\x20body.dataStream\x20:\x20\x22\x22;\x0aconst\x20rawParagraphs\x20=\x20Array.isArray(body.paragraphs)\x20?\x20body.paragraphs\x20:\x20[];\x0a\x0afunction\x20cleanPreview(text)\x20{\x0a\x20\x20const\x20normalized\x20=\x20text.replace(/[\x5cu0000-\x5cu001f]+/g,\x20\x22\x20\x22).replace(/\x5cs+/g,\x20\x22\x20\x22).trim();\x0a\x20\x20return\x20normalized.length\x20<=\x20120\x20?\x20normalized\x20:\x20normalized.slice(0,\x20117)\x20+\x20\x22...\x22;\x0a}\x0a\x0afunction\x20resolveParagraphs()\x20{\x0a\x20\x20let\x20start\x20=\x200;\x0a\x20\x20return\x20rawParagraphs.map((paragraph,\x20index)\x20=>\x20{\x0a\x20\x20\x20\x20const\x20end\x20=\x20Number.isInteger(paragraph.startIndex)\x20?\x20paragraph.startIndex\x20:\x20start;\x0a\x20\x20\x20\x20const\x20result\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20id:\x20typeof\x20paragraph.paragraphId\x20===\x20\x22string\x22\x20?\x20paragraph.paragraphId\x20:\x20String(index),\x0a\x20\x20\x20\x20\x20\x20index,\x0a\x20\x20\x20\x20\x20\x20text:\x20stream.slice(start,\x20end),\x0a\x20\x20\x20\x20\x20\x20start,\x0a\x20\x20\x20\x20\x20\x20end,\x0a\x20\x20\x20\x20\x20\x20raw:\x20paragraph,\x0a\x20\x20\x20\x20};\x0a\x20\x20\x20\x20start\x20=\x20end\x20+\x201;\x0a\x20\x20\x20\x20return\x20result;\x0a\x20\x20});\x0a}\x0a\x0aconst\x20paragraphs\x20=\x20resolveParagraphs();\x0a\x0afunction\x20resolveParagraph(selector)\x20{\x0a\x20\x20if\x20(!selector\x20||\x20typeof\x20selector\x20!==\x20\x22object\x22)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Paragraph\x20selector\x20must\x20be\x20an\x20object\x22)\x20};\x0a\x20\x20const\x20keys\x20=\x20[\x22id\x22,\x20\x22index\x22].filter((key)\x20=>\x20Object.hasOwn(selector,\x20key));\x0a\x20\x20if\x20(keys.length\x20!==\x201)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Paragraph\x20selector\x20must\x20contain\x20exactly\x20one\x20of\x20id\x20or\x20index\x22,\x20selector)\x20};\x0a\x20\x20let\x20matches\x20=\x20[];\x0a\x20\x20if\x20(keys[0]\x20===\x20\x22id\x22\x20&&\x20typeof\x20selector.id\x20===\x20\x22string\x22\x20&&\x20selector.id.length\x20>\x200)\x20matches\x20=\x20paragraphs.filter((paragraph)\x20=>\x20paragraph.id\x20===\x20selector.id);\x0a\x20\x20else\x20if\x20(keys[0]\x20===\x20\x22index\x22\x20&&\x20Number.isInteger(selector.index)\x20&&\x20selector.index\x20>=\x200)\x20matches\x20=\x20paragraphs[selector.index]\x20?\x20[paragraphs[selector.index]]\x20:\x20[];\x0a\x20\x20else\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Paragraph\x20selector\x20value\x20is\x20invalid\x22,\x20selector)\x20};\x0a\x20\x20if\x20(matches.length\x20===\x200)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_NOT_FOUND\x22,\x20\x22Paragraph\x20selector\x20did\x20not\x20match\x20a\x20paragraph\x22,\x20selector)\x20};\x0a\x20\x20if\x20(matches.length\x20>\x201)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_AMBIGUOUS\x22,\x20\x22Paragraph\x20selector\x20matched\x20more\x20than\x20one\x20paragraph\x22,\x20selector)\x20};\x0a\x20\x20return\x20{\x20paragraph:\x20matches[0]\x20};\x0a}\x0a\x0aif\x20(input.query.kind\x20===\x20\x22document\x22)\x20{\x0a\x20\x20const\x20mode\x20=\x20typeof\x20document.isModern\x20===\x20\x22function\x22\x20&&\x20document.isModern()\x0a\x20\x20\x20\x20?\x20\x22modern\x22\x0a\x20\x20\x20\x20:\x20typeof\x20document.isTraditional\x20===\x20\x22function\x22\x20&&\x20document.isTraditional()\x0a\x20\x20\x20\x20\x20\x20?\x20\x22paginated\x22\x0a\x20\x20\x20\x20\x20\x20:\x20\x22unspecified\x22;\x0a\x20\x20return\x20success({\x0a\x20\x20\x20\x20kind:\x20\x22document\x22,\x0a\x20\x20\x20\x20unitId:\x20input.unitId,\x0a\x20\x20\x20\x20title:\x20document.getName(),\x0a\x20\x20\x20\x20mode,\x0a\x20\x20\x20\x20paragraphCount:\x20paragraphs.length,\x0a\x20\x20\x20\x20characterCount:\x20paragraphs.reduce((total,\x20paragraph)\x20=>\x20total\x20+\x20paragraph.text.length,\x200),\x0a\x20\x20\x20\x20features:\x20{\x0a\x20\x20\x20\x20\x20\x20tables:\x20Array.isArray(body.tables)\x20?\x20body.tables.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20lists:\x20paragraphs.filter((paragraph)\x20=>\x20paragraph.raw.bullet\x20!==\x20undefined).length,\x0a\x20\x20\x20\x20\x20\x20drawings:\x20snapshot.drawings\x20&&\x20typeof\x20snapshot.drawings\x20===\x20\x22object\x22\x20?\x20Object.keys(snapshot.drawings).length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20customBlocks:\x20Array.isArray(body.customBlocks)\x20?\x20body.customBlocks.length\x20:\x200,\x0a\x20\x20\x20\x20\x20\x20blockRanges:\x20Array.isArray(body.blockRanges)\x20?\x20body.blockRanges.length\x20:\x200,\x0a\x20\x20\x20\x20},\x0a\x20\x20\x20\x20paragraphs:\x20paragraphs.map((paragraph)\x20=>\x20({\x20id:\x20paragraph.id,\x20index:\x20paragraph.index,\x20textPreview:\x20cleanPreview(paragraph.text)\x20})),\x0a\x20\x20});\x0a}\x0a\x0aif\x20(input.query.kind\x20===\x20\x22paragraph\x22)\x20{\x0a\x20\x20const\x20selected\x20=\x20[];\x0a\x20\x20for\x20(const\x20selector\x20of\x20input.query.paragraphs\x20||\x20[])\x20{\x0a\x20\x20\x20\x20const\x20item\x20=\x20resolveParagraph(selector);\x0a\x20\x20\x20\x20if\x20(item.error)\x20return\x20item.error;\x0a\x20\x20\x20\x20const\x20paragraph\x20=\x20item.paragraph;\x0a\x20\x20\x20\x20const\x20runs\x20=\x20(Array.isArray(body.textRuns)\x20?\x20body.textRuns\x20:\x20[]).filter((run)\x20=>\x20(run.ed\x20||\x200)\x20>\x20paragraph.start\x20&&\x20(run.st\x20||\x200)\x20<\x20paragraph.end);\x0a\x20\x20\x20\x20const\x20bullet\x20=\x20paragraph.raw.bullet;\x0a\x20\x20\x20\x20const\x20listId\x20=\x20bullet\x20&&\x20bullet.listId;\x0a\x20\x20\x20\x20const\x20list\x20=\x20typeof\x20listId\x20===\x20\x22string\x22\x20&&\x20snapshot.lists\x20&&\x20snapshot.lists[listId];\x0a\x20\x20\x20\x20selected.push({\x0a\x20\x20\x20\x20\x20\x20id:\x20paragraph.id,\x0a\x20\x20\x20\x20\x20\x20index:\x20paragraph.index,\x0a\x20\x20\x20\x20\x20\x20text:\x20paragraph.text,\x0a\x20\x20\x20\x20\x20\x20...(paragraph.raw.paragraphStyle\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20style:\x20paragraph.raw.paragraphStyle\x20}),\x0a\x20\x20\x20\x20\x20\x20...(bullet\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20bullet\x20}),\x0a\x20\x20\x20\x20\x20\x20...(list\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20list\x20}),\x0a\x20\x20\x20\x20\x20\x20textRuns:\x20runs,\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x20\x20return\x20success({\x20kind:\x20\x22paragraph\x22,\x20unitId:\x20input.unitId,\x20paragraphs:\x20selected\x20});\x0a}\x0a\x0areturn\x20fail(\x22INSPECTION_RESULT_INVALID\x22,\x20\x22Unsupported\x20document\x20inspection\x20target\x22);\x0a','554400tmYcKE','paragraph','Inspection\x20runtime\x20returned\x20an\x20invalid\x20error\x20envelope','1561266MFxuZT','isArray','ranges','worksheet-range'];_0x28c3=function(){return _0x589434;};return _0x28c3();}function c(_0x12ce2c,_0x19ad20){const _0xc2f6e1=_0x4bd1fa;return'\x0aconst\x20input\x20=\x20'+JSON[_0xc2f6e1(0x17c)]({'query':_0x19ad20,'unitId':_0x12ce2c})+';\x0aconst\x20fail\x20=\x20(code,\x20message,\x20details)\x20=>\x20({\x20ok:\x20false,\x20error:\x20{\x20code,\x20message,\x20...(details\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20details\x20})\x20}\x20});\x0aconst\x20success\x20=\x20(value)\x20=>\x20({\x20ok:\x20true,\x20value\x20});\x0aconst\x20presentation\x20=\x20univerAPI.getPresentation(input.unitId);\x0aif\x20(!presentation)\x20return\x20fail(\x22INSPECTION_RESULT_INVALID\x22,\x20\x22Presentation\x20\x22\x20+\x20input.unitId\x20+\x20\x22\x20is\x20not\x20available\x20in\x20the\x20runtime\x22);\x0aconst\x20snapshot\x20=\x20presentation.save();\x0aconst\x20slideIds\x20=\x20Array.isArray(snapshot.slideOrder)\x20?\x20snapshot.slideOrder\x20:\x20Object.keys(snapshot.slides\x20||\x20{});\x0aconst\x20slides\x20=\x20slideIds.map((id)\x20=>\x20snapshot.slides\x20&&\x20snapshot.slides[id]).filter(Boolean);\x0a\x0afunction\x20documentText(documentData)\x20{\x0a\x20\x20const\x20stream\x20=\x20documentData\x20&&\x20documentData.body\x20&&\x20documentData.body.dataStream;\x0a\x20\x20return\x20typeof\x20stream\x20===\x20\x22string\x22\x20?\x20stream.replace(/\x5cr/g,\x20\x22\x5cn\x22).replace(/[\x5cu0000-\x5cu0009\x5cu000b-\x5cu001f]+/g,\x20\x22\x22).replace(/\x5cn+$/g,\x20\x22\x22)\x20:\x20\x22\x22;\x0a}\x0a\x0afunction\x20elementText(element)\x20{\x0a\x20\x20if\x20(typeof\x20element.text\x20===\x20\x22string\x22)\x20return\x20element.text;\x0a\x20\x20if\x20(element.textData)\x20return\x20documentText(element.textData);\x0a\x20\x20const\x20shapeData\x20=\x20element.shapeData\x20||\x20element.connectorData;\x0a\x20\x20const\x20shapeText\x20=\x20shapeData\x20&&\x20shapeData.shapeText;\x0a\x20\x20if\x20(shapeText\x20&&\x20typeof\x20shapeText.text\x20===\x20\x22string\x22)\x20return\x20shapeText.text;\x0a\x20\x20if\x20(shapeText\x20&&\x20shapeText.dataModel\x20&&\x20shapeText.dataModel.doc)\x20return\x20documentText(shapeText.dataModel.doc);\x0a\x20\x20return\x20\x22\x22;\x0a}\x0a\x0afunction\x20elementCountType(type)\x20{\x0a\x20\x20if\x20(type\x20===\x20\x22chart\x22)\x20return\x20\x22charts\x22;\x0a\x20\x20if\x20(type\x20===\x20\x22image\x22)\x20return\x20\x22images\x22;\x0a\x20\x20if\x20(type\x20===\x20\x22table\x22)\x20return\x20\x22tables\x22;\x0a\x20\x20if\x20(type\x20===\x20\x22group\x22)\x20return\x20\x22groups\x22;\x0a\x20\x20if\x20(type\x20===\x20\x22text\x22\x20||\x20type\x20===\x20\x22placeholder\x22)\x20return\x20\x22text\x22;\x0a\x20\x20return\x20\x22shapes\x22;\x0a}\x0a\x0afunction\x20collectElements(slide)\x20{\x0a\x20\x20const\x20elements\x20=\x20slide.elements\x20||\x20{};\x0a\x20\x20const\x20visited\x20=\x20new\x20Set();\x0a\x20\x20const\x20output\x20=\x20[];\x0a\x20\x20function\x20visit(id)\x20{\x0a\x20\x20\x20\x20if\x20(visited.has(id))\x20return;\x0a\x20\x20\x20\x20visited.add(id);\x0a\x20\x20\x20\x20const\x20element\x20=\x20elements[id];\x0a\x20\x20\x20\x20if\x20(!element)\x20return;\x0a\x20\x20\x20\x20output.push(element);\x0a\x20\x20\x20\x20if\x20(element.type\x20===\x20\x22group\x22\x20&&\x20Array.isArray(element.children))\x20element.children.forEach(visit);\x0a\x20\x20}\x0a\x20\x20(Array.isArray(slide.elementOrder)\x20?\x20slide.elementOrder\x20:\x20Object.keys(elements)).forEach(visit);\x0a\x20\x20Object.keys(elements).forEach(visit);\x0a\x20\x20return\x20output;\x0a}\x0a\x0afunction\x20elementCounts(slide)\x20{\x0a\x20\x20const\x20counts\x20=\x20{\x20total:\x200,\x20text:\x200,\x20shapes:\x200,\x20images:\x200,\x20charts:\x200,\x20tables:\x200,\x20groups:\x200\x20};\x0a\x20\x20for\x20(const\x20element\x20of\x20collectElements(slide))\x20{\x0a\x20\x20\x20\x20counts.total\x20+=\x201;\x0a\x20\x20\x20\x20counts[elementCountType(element.type)]\x20+=\x201;\x0a\x20\x20}\x0a\x20\x20return\x20counts;\x0a}\x0a\x0afunction\x20slideSummary(slide,\x20index)\x20{\x0a\x20\x20const\x20text\x20=\x20collectElements(slide).map(elementText).filter(Boolean).join(\x22\x20|\x20\x22).replace(/\x5cs+/g,\x20\x22\x20\x22).trim();\x0a\x20\x20const\x20preview\x20=\x20text.length\x20<=\x20160\x20?\x20text\x20:\x20text.slice(0,\x20157)\x20+\x20\x22...\x22;\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20id:\x20slide.id,\x0a\x20\x20\x20\x20index,\x0a\x20\x20\x20\x20name:\x20slide.name\x20||\x20\x22\x22,\x0a\x20\x20\x20\x20elementCounts:\x20elementCounts(slide),\x0a\x20\x20\x20\x20...(preview\x20===\x20\x22\x22\x20?\x20{}\x20:\x20{\x20textPreview:\x20preview\x20}),\x0a\x20\x20\x20\x20hasSpeakerNotes:\x20typeof\x20slide.speakerNotes\x20===\x20\x22string\x22\x20&&\x20slide.speakerNotes.length\x20>\x200,\x0a\x20\x20};\x0a}\x0a\x0afunction\x20parseTableResources()\x20{\x0a\x20\x20const\x20resource\x20=\x20(Array.isArray(snapshot.resources)\x20?\x20snapshot.resources\x20:\x20[]).find((item)\x20=>\x20item\x20&&\x20item.name\x20===\x20\x22SLIDE_TABLE_PLUGIN\x22);\x0a\x20\x20if\x20(!resource\x20||\x20typeof\x20resource.data\x20!==\x20\x22string\x22)\x20return\x20{};\x0a\x20\x20try\x20{\x0a\x20\x20\x20\x20const\x20parsed\x20=\x20JSON.parse(resource.data);\x0a\x20\x20\x20\x20return\x20parsed\x20&&\x20typeof\x20parsed.tables\x20===\x20\x22object\x22\x20?\x20parsed.tables\x20:\x20{};\x0a\x20\x20}\x20catch\x20{\x0a\x20\x20\x20\x20return\x20{};\x0a\x20\x20}\x0a}\x0a\x0aconst\x20tableResources\x20=\x20parseTableResources();\x0a\x0afunction\x20tableText(tableId)\x20{\x0a\x20\x20const\x20table\x20=\x20tableResources[tableId];\x0a\x20\x20if\x20(!table\x20||\x20!Array.isArray(table.rows))\x20return\x20undefined;\x0a\x20\x20return\x20table.rows.map((row)\x20=>\x20(Array.isArray(row.cells)\x20?\x20row.cells\x20:\x20[]).map((cell)\x20=>\x20documentText(cell\x20&&\x20cell.textData)));\x0a}\x0a\x0afunction\x20finite(value)\x20{\x0a\x20\x20return\x20typeof\x20value\x20===\x20\x22number\x22\x20&&\x20Number.isFinite(value)\x20?\x20value\x20:\x20undefined;\x0a}\x0a\x0afunction\x20transformOf(element)\x20{\x0a\x20\x20const\x20transform\x20=\x20element.transform\x20||\x20{};\x0a\x20\x20const\x20result\x20=\x20{};\x0a\x20\x20const\x20left\x20=\x20finite(transform.left\x20??\x20transform.x);\x0a\x20\x20const\x20top\x20=\x20finite(transform.top\x20??\x20transform.y);\x0a\x20\x20const\x20width\x20=\x20finite(transform.width);\x0a\x20\x20const\x20height\x20=\x20finite(transform.height);\x0a\x20\x20const\x20angle\x20=\x20finite(transform.angle\x20??\x20transform.rotation);\x0a\x20\x20if\x20(left\x20!==\x20undefined)\x20result.left\x20=\x20left;\x0a\x20\x20if\x20(top\x20!==\x20undefined)\x20result.top\x20=\x20top;\x0a\x20\x20if\x20(width\x20!==\x20undefined)\x20result.width\x20=\x20width;\x0a\x20\x20if\x20(height\x20!==\x20undefined)\x20result.height\x20=\x20height;\x0a\x20\x20if\x20(angle\x20!==\x20undefined)\x20result.angle\x20=\x20angle;\x0a\x20\x20return\x20Object.keys(result).length\x20===\x200\x20?\x20undefined\x20:\x20result;\x0a}\x0a\x0afunction\x20inspectElement(element,\x20elements,\x20ancestors)\x20{\x0a\x20\x20const\x20shapeData\x20=\x20element.shapeData\x20||\x20element.connectorData\x20||\x20{};\x0a\x20\x20const\x20shapeText\x20=\x20shapeData.shapeText\x20||\x20{};\x0a\x20\x20const\x20text\x20=\x20elementText(element);\x0a\x20\x20const\x20output\x20=\x20{\x0a\x20\x20\x20\x20id:\x20element.id,\x0a\x20\x20\x20\x20type:\x20String(element.type\x20||\x20\x22unknown\x22),\x0a\x20\x20\x20\x20name:\x20typeof\x20element.name\x20===\x20\x22string\x22\x20?\x20element.name\x20:\x20\x22\x22,\x0a\x20\x20\x20\x20visible:\x20element.visible\x20!==\x20false,\x0a\x20\x20};\x0a\x20\x20const\x20transform\x20=\x20transformOf(element);\x0a\x20\x20if\x20(transform)\x20output.transform\x20=\x20transform;\x0a\x20\x20if\x20(shapeData.fill\x20!==\x20undefined)\x20output.fill\x20=\x20shapeData.fill;\x0a\x20\x20if\x20((shapeData.stroke\x20??\x20element.stroke)\x20!==\x20undefined)\x20output.stroke\x20=\x20shapeData.stroke\x20??\x20element.stroke;\x0a\x20\x20if\x20(text\x20!==\x20\x22\x22)\x20{\x0a\x20\x20\x20\x20const\x20textDetails\x20=\x20{\x20text\x20};\x0a\x20\x20\x20\x20const\x20horizontal\x20=\x20shapeText.dataModel\x20&&\x20shapeText.dataModel.ha;\x0a\x20\x20\x20\x20const\x20vertical\x20=\x20shapeText.dataModel\x20&&\x20shapeText.dataModel.va;\x0a\x20\x20\x20\x20if\x20(horizontal\x20!==\x20undefined\x20||\x20vertical\x20!==\x20undefined)\x20textDetails.alignment\x20=\x20{\x0a\x20\x20\x20\x20\x20\x20...(horizontal\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20horizontal\x20}),\x0a\x20\x20\x20\x20\x20\x20...(vertical\x20===\x20undefined\x20?\x20{}\x20:\x20{\x20vertical\x20}),\x0a\x20\x20\x20\x20};\x0a\x20\x20\x20\x20if\x20(shapeText.padding\x20!==\x20undefined\x20||\x20shapeText.insets\x20!==\x20undefined)\x20textDetails.insets\x20=\x20shapeText.padding\x20??\x20shapeText.insets;\x0a\x20\x20\x20\x20output.text\x20=\x20textDetails;\x0a\x20\x20}\x0a\x20\x20if\x20(typeof\x20element.chartId\x20===\x20\x22string\x22)\x20output.chartId\x20=\x20element.chartId;\x0a\x20\x20if\x20(typeof\x20element.tableId\x20===\x20\x22string\x22)\x20{\x0a\x20\x20\x20\x20output.tableId\x20=\x20element.tableId;\x0a\x20\x20\x20\x20const\x20grid\x20=\x20tableText(element.tableId);\x0a\x20\x20\x20\x20if\x20(grid)\x20output.tableText\x20=\x20grid;\x0a\x20\x20}\x0a\x20\x20if\x20(typeof\x20element.mediaType\x20===\x20\x22string\x22)\x20output.mediaType\x20=\x20element.mediaType;\x0a\x20\x20if\x20(element.type\x20===\x20\x22group\x22\x20&&\x20Array.isArray(element.children))\x20{\x0a\x20\x20\x20\x20output.children\x20=\x20element.children.filter((id)\x20=>\x20!ancestors.has(id)\x20&&\x20elements[id]).map((id)\x20=>\x20{\x0a\x20\x20\x20\x20\x20\x20const\x20next\x20=\x20new\x20Set(ancestors);\x0a\x20\x20\x20\x20\x20\x20next.add(id);\x0a\x20\x20\x20\x20\x20\x20return\x20inspectElement(elements[id],\x20elements,\x20next);\x0a\x20\x20\x20\x20});\x0a\x20\x20}\x0a\x20\x20return\x20output;\x0a}\x0a\x0afunction\x20slideDetails(slide,\x20index)\x20{\x0a\x20\x20const\x20summary\x20=\x20slideSummary(slide,\x20index);\x0a\x20\x20const\x20elements\x20=\x20slide.elements\x20||\x20{};\x0a\x20\x20const\x20ordered\x20=\x20Array.isArray(slide.elementOrder)\x20?\x20slide.elementOrder\x20:\x20Object.keys(elements);\x0a\x20\x20return\x20{\x0a\x20\x20\x20\x20...summary,\x0a\x20\x20\x20\x20speakerNotes:\x20typeof\x20slide.speakerNotes\x20===\x20\x22string\x22\x20?\x20slide.speakerNotes\x20:\x20\x22\x22,\x0a\x20\x20\x20\x20elements:\x20ordered.filter((id)\x20=>\x20elements[id]).map((id)\x20=>\x20inspectElement(elements[id],\x20elements,\x20new\x20Set([id]))),\x0a\x20\x20};\x0a}\x0a\x0afunction\x20resolveSlide(selector)\x20{\x0a\x20\x20if\x20(!selector\x20||\x20typeof\x20selector\x20!==\x20\x22object\x22)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Slide\x20selector\x20must\x20be\x20an\x20object\x22)\x20};\x0a\x20\x20const\x20keys\x20=\x20[\x22id\x22,\x20\x22index\x22].filter((key)\x20=>\x20Object.hasOwn(selector,\x20key));\x0a\x20\x20if\x20(keys.length\x20!==\x201)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Slide\x20selector\x20must\x20contain\x20exactly\x20one\x20of\x20id\x20or\x20index\x22,\x20selector)\x20};\x0a\x20\x20let\x20matches\x20=\x20[];\x0a\x20\x20if\x20(keys[0]\x20===\x20\x22id\x22\x20&&\x20typeof\x20selector.id\x20===\x20\x22string\x22\x20&&\x20selector.id.length\x20>\x200)\x20matches\x20=\x20slides.filter((slide)\x20=>\x20slide.id\x20===\x20selector.id);\x0a\x20\x20else\x20if\x20(keys[0]\x20===\x20\x22index\x22\x20&&\x20Number.isInteger(selector.index)\x20&&\x20selector.index\x20>=\x200)\x20matches\x20=\x20slides[selector.index]\x20?\x20[slides[selector.index]]\x20:\x20[];\x0a\x20\x20else\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_INVALID\x22,\x20\x22Slide\x20selector\x20value\x20is\x20invalid\x22,\x20selector)\x20};\x0a\x20\x20if\x20(matches.length\x20===\x200)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_NOT_FOUND\x22,\x20\x22Slide\x20selector\x20did\x20not\x20match\x20a\x20slide\x22,\x20selector)\x20};\x0a\x20\x20if\x20(matches.length\x20>\x201)\x20return\x20{\x20error:\x20fail(\x22INSPECTION_SELECTOR_AMBIGUOUS\x22,\x20\x22Slide\x20selector\x20matched\x20more\x20than\x20one\x20slide\x22,\x20selector)\x20};\x0a\x20\x20return\x20{\x20slide:\x20matches[0],\x20index:\x20slides.indexOf(matches[0])\x20};\x0a}\x0a\x0aif\x20(input.query.kind\x20===\x20\x22presentation\x22)\x20{\x0a\x20\x20const\x20size\x20=\x20presentation.getPageSize();\x0a\x20\x20return\x20success({\x0a\x20\x20\x20\x20kind:\x20\x22presentation\x22,\x0a\x20\x20\x20\x20unitId:\x20input.unitId,\x0a\x20\x20\x20\x20name:\x20presentation.getName(),\x0a\x20\x20\x20\x20size:\x20{\x20width:\x20size.width,\x20height:\x20size.height\x20},\x0a\x20\x20\x20\x20masterSlideCount:\x20Array.isArray(snapshot.masterPageOrder)\x20?\x20snapshot.masterPageOrder.length\x20:\x20Object.keys(snapshot.masterPages\x20||\x20{}).length,\x0a\x20\x20\x20\x20layoutSlideCount:\x20Array.isArray(snapshot.layoutPageOrder)\x20?\x20snapshot.layoutPageOrder.length\x20:\x20Object.keys(snapshot.layoutPages\x20||\x20{}).length,\x0a\x20\x20\x20\x20slides:\x20slides.map(slideSummary),\x0a\x20\x20});\x0a}\x0a\x0aif\x20(input.query.kind\x20===\x20\x22slide\x22)\x20{\x0a\x20\x20const\x20selected\x20=\x20[];\x0a\x20\x20for\x20(const\x20selector\x20of\x20input.query.slides\x20||\x20[])\x20{\x0a\x20\x20\x20\x20const\x20item\x20=\x20resolveSlide(selector);\x0a\x20\x20\x20\x20if\x20(item.error)\x20return\x20item.error;\x0a\x20\x20\x20\x20selected.push(slideDetails(item.slide,\x20item.index));\x0a\x20\x20}\x0a\x20\x20return\x20success({\x20kind:\x20\x22slide\x22,\x20unitId:\x20input.unitId,\x20slides:\x20selected\x20});\x0a}\x0a\x0areturn\x20fail(\x22INSPECTION_RESULT_INVALID\x22,\x20\x22Unsupported\x20slide\x20inspection\x20target\x22);\x0a';}async function l(_0x5a8624,_0x207872){const _0x135890=_0x4bd1fa;d(_0x207872),f(_0x5a8624[_0x135890(0x175)],_0x207872[_0x135890(0x18e)]);let _0x1a2027=u(_0x5a8624['unitId'],_0x207872),_0x4bcd6a=t((await _0x5a8624[_0x135890(0x193)]({'code':_0x1a2027,'mode':'read'}))[_0x135890(0x196)]);return n(_0x4bcd6a,_0x207872['kind']),_0x4bcd6a;}function u(_0x2a928a,_0xbdca84){const _0x10944=_0x4bd1fa;switch(_0xbdca84[_0x10944(0x18e)]){case _0x10944(0x185):case _0x10944(0x187):case'worksheet-range':return s(_0x2a928a,_0xbdca84);case _0x10944(0x19b):case'slide':return c(_0x2a928a,_0xbdca84);case _0x10944(0x19d):case _0x10944(0x17f):return o(_0x2a928a,_0xbdca84);}}function d(_0x10d2da){const _0x2dea70=_0x4bd1fa;let _0xa6670e=_0x10d2da[_0x2dea70(0x18e)]===_0x2dea70(0x187)?_0x10d2da['worksheets']:_0x10d2da[_0x2dea70(0x18e)]===_0x2dea70(0x184)?_0x10d2da[_0x2dea70(0x183)]:_0x10d2da[_0x2dea70(0x18e)]===_0x2dea70(0x1a3)?_0x10d2da[_0x2dea70(0x172)]:_0x10d2da[_0x2dea70(0x18e)]===_0x2dea70(0x17f)?_0x10d2da[_0x2dea70(0x19f)]:null;if(_0xa6670e!==null&&_0xa6670e[_0x2dea70(0x191)]===0x0)throw new e(_0x2dea70(0x195),_0x10d2da[_0x2dea70(0x18e)]+_0x2dea70(0x1a1));}function f(_0x206903,_0xaf8aa2){const _0x15f178=_0x4bd1fa;let _0x335657=_0xaf8aa2===_0x15f178(0x185)||_0xaf8aa2===_0x15f178(0x187)||_0xaf8aa2==='worksheet-range'?_0x15f178(0x186):_0xaf8aa2==='presentation'||_0xaf8aa2===_0x15f178(0x1a3)?'slide':_0x15f178(0x1a0);if(_0x206903!==_0x335657)throw new e('INSPECTION_UNIT_TYPE_MISMATCH',_0xaf8aa2+'\x20inspection\x20requires\x20a\x20'+_0x335657+_0x15f178(0x173)+_0x206903,{'actual':_0x206903,'expected':_0x335657,'kind':_0xaf8aa2});}export{e as ContentInspectionError,l as inspectContent};
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@univer-cli/content-inspection",
3
+ "type": "module",
4
+ "version": "1.0.0-beta.2",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "README.md",
18
+ "README.zh-CN.md"
19
+ ],
20
+ "dependencies": {
21
+ "@univerjs/core": "1.0.0-beta.2"
22
+ }
23
+ }