tadcode-wpsjs 1.1.0 → 1.2.1

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 CHANGED
@@ -1,29 +1,26 @@
1
1
  # tadcode-wpsjs
2
2
 
3
- ## 基于wps官方文档
4
- - [**AirScript文档**](https://airsheet.wps.cn/docs/apitoken/intro.html)
5
- - [**WPS多维表格:“开发”功能使用说明文档**](https://365.kdocs.cn/l/ctzsgDlAGF0l)
6
- - [**执行AirScript脚本操作使用指南**](https://365.kdocs.cn/l/cdQOqc6TZuMk)
7
- - [**快速入门多维表“开发”**](https://365.kdocs.cn/l/ctx1jAV1xJhR)
8
- - [**WPS开放平台dbsheet-Api部分**](https://365.kdocs.cn/3rd/open/documents/app-integration-dev/guide/dbsheet/Api/api-instro)
3
+ ## 介绍
9
4
 
10
- ## 联系我
5
+ 项目地址:[https://gitcode.com/caisijian/tadcode-wpsjs](https://gitcode.com/caisijian/tadcode-wpsjs)
11
6
 
12
- **如你有业务需要wps代码服务,可以点此[联系我](https://f.kdocs.cn/g/SIdEy3GE/),三个工作日内必定回复。**
7
+ 在部署远程代码的情况下,可以远程调用`WpsjsGlobal`,实现对支持`AirScript`的多维表,智能表格等远程操作。如果你对`AirScript`,感兴趣,也能帮助你学习`WpsjsGlobal`。
13
8
 
14
- **如您公司存在敏感信息业务,需要长期人才,亦可来讯商谈。**
9
+ 原理是使用代理收集调用信息,之后让远程代码进行调用并且返回结果。
10
+ 远程代码在`tadcode-wpsjs/remoteCode`目录的`index.js`文件中。
11
+ 将其复制粘贴到对应`webhook`的脚本中才能支持`WpsjsGlobal`对象的调用。
15
12
 
16
- ![扫一扫联系我](data:image/png;base64,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)
13
+ 目前已经对多维表的基本操作,实现了全类型支持。
17
14
 
18
- ## 应用
15
+ 如果对你有用请在[gitcode](https://gitcode.com/caisijian/tadcode-wpsjs)给个`star`,谢谢。
19
16
 
20
- 用于学习wpsjs-api,远程调用wpsjs-api。
17
+ ## 联系我
21
18
 
22
- 使用wpsjs-api。支持异步任务。
19
+ **如你有业务需要wps代码,可以点此[联系我](https://f.kdocs.cn/g/SIdEy3GE/),三个工作日内必定回复。**
23
20
 
24
- 在远程部署代码好代码,通过传输的调用信息进行调用api。原理是使用代理收集调用信息,之后让远程代码进行调用并且返回结果。
21
+ **如您公司存在敏感信息业务,需要长期人才,亦可来讯商谈。**
25
22
 
26
- 远程代码在`tadcode-wpsjs/remoteCode`目录的`index.js`文件中。将其复制粘贴到对应`webhook`的脚本中才能支持`wpsjsGlobal`的调用。
23
+ ![扫一扫联系我](data:image/png;base64,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)
27
24
 
28
25
  ## 安装
29
26
 
@@ -59,15 +56,16 @@ console.log(data)
59
56
  ### 重命名(远程赋值操作)
60
57
 
61
58
  ```ts
62
- import { initRemoteCallWpsjsGlobal } from 'tadcode-wpsjs'
59
+ import { initRemoteCallWpsjsGlobal,setValue } from 'tadcode-wpsjs'
63
60
  /* 脚本令牌 具体获取方式参考上面 */
64
61
  const scriptToken = 'xxxx'
65
62
  /* webhook url地址 具体获取方式参考上面 */
66
63
  const webhookURL = 'xxxx'
67
64
  const wpsjsGlobal = initRemoteCallWpsjsGlobal({ scriptToken, webhookURL, })
65
+
68
66
  /* 类型完善中 */
69
- wpsjsGlobal.Application.Sheets(1).Name = 'new table4'
70
- console.log(data)
67
+ const sheet = wpsjsGlobal.Application.Sheets(1)
68
+ await setValue(sheet,'Name','table1001')
71
69
  ```
72
70
 
73
71
  ### 执行脚本并且返回(不用部署remoteCode代码)
@@ -86,3 +84,10 @@ console.log(data)
86
84
  ## 支持
87
85
 
88
86
  如果对你有用请在[gitcode](https://gitcode.com/caisijian/tadcode-wpsjs)给个`star`
87
+
88
+ ## 基于wps官方文档
89
+ - [**AirScript文档**](https://airsheet.wps.cn/docs/apitoken/intro.html)
90
+ - [**WPS多维表格:“开发”功能使用说明文档**](https://365.kdocs.cn/l/ctzsgDlAGF0l)
91
+ - [**执行AirScript脚本操作使用指南**](https://365.kdocs.cn/l/cdQOqc6TZuMk)
92
+ - [**快速入门多维表“开发”**](https://365.kdocs.cn/l/ctx1jAV1xJhR)
93
+ - [**WPS开放平台dbsheet-Api部分**](https://365.kdocs.cn/3rd/open/documents/app-integration-dev/guide/dbsheet/Api/api-instro)
package/index.js CHANGED
@@ -1 +1,4 @@
1
- import{writeFile as V}from"fs/promises";import v from"path";var Q=Symbol("info"),G=Symbol("then"),I=(J)=>{let{scriptToken:B,webhookURL:X,isAsync:K=!1,printLog:Y=!1,writeLogFile:M=!1}=J,N={get(E,H,$){let Z=E[Q]??=[],z=()=>{};if(z[G]=!1,z[Q]=[...Z],H!=="then")z[Q].push({method:"get",arguments:[H]});else z[G]=!0;return new Proxy(z,N)},set(E,H,$,Z){let q=[...E[Q]??=[],{method:"set",arguments:[H,$]}];return U=D({scriptToken:B,webhookURL:X,isAsync:K,argv:{info:q}}).then(async(x)=>{let W=await x.json();if(Y)_(W);if(M)await P(W);return W?.data.result}),!0},apply(E,H,$){if(!E[G]){let Z=E[Q]??=[],z=()=>{};return z[G]=!1,z[Q]=[...Z,{method:"apply",arguments:$}],new Proxy(z,N)}else{let Z=E[Q];return D({scriptToken:B,webhookURL:X,isAsync:K,argv:{info:Z}}).then(async(z)=>{let q=await z.json();if(Y)_(q);if(M)await P(q);return q?.data.result}).then(...$)}}};return new Proxy(()=>{},N)},D=({scriptToken:J,webhookURL:B,isAsync:X,argv:K})=>{let Y=JSON.stringify({Context:{argv:K}}),M=v.parse(B);M.base=X?"task":"sync_task";let N=v.format(M);return fetch(N,{method:"post",headers:{"Content-Type":"application/json","AirScript-Token":J},body:Y})},U=null,j=async()=>U,O=(J)=>{let B=new URL("https://www.kdocs.cn/api/v3/script/task");return B.searchParams.append("task_id",J),fetch(B)},_=(J)=>{let B=J,{status:X,data:K,error:Y,error_details:M}=B;console.log("status:",X);let N=K.logs.at(-1).unix_time-K.logs[1].unix_time;if(console.log("runtime:",N),Y)console.error(M.name),console.error(M.msg),console.error(M.stack);let E=K.logs.filter((H)=>H.filename!=="<system>");if(E.length!==0){console.log("log:");for(let H of E)console[H.level](...H.args)}return console.log("result:"),console.log(K.result),B},P=(J)=>{return V("./wpsjs.log.json",JSON.stringify(J,void 0,2))};export{P as writeLogFileToCurrent,j as setValueOk,O as queryTask,I as initRemoteCallWpsjsGlobal,D as execution};
1
+ import{writeFile as A}from"fs/promises";import I from"path";var Z=Symbol("info-tacode"),F=Symbol("then-tacode"),U=Symbol("raw-tacode"),L={then:1,catch:1,finally:1},R=(B)=>{let{scriptToken:H,webhookURL:z,isAsync:N=!1,printLog:Q=!1,writeLogFile:J=!1}=B;if(!H||!z)throw Error("scriptToken and webhookURL are both required");let $=async(D)=>{let K=await D.json();if(J)await j(K);if(x(K),Q)V(K);return K.data?.result},X=async(D)=>P({scriptToken:H,webhookURL:z,isAsync:N,argv:{info:D}}).then($),W=()=>{let D=()=>{};return D[F]=!1,D[Z]=[],D},v={get(D,K,q){if(K===U)return D;let G=D[Z],M=W(),Y=M[Z];if(Y.push(...G),K in L)M[F]=!0;return Y.push({method:"get",arguments:[K]}),new Proxy(M,v)},set(D,K,q,G){let Y=[...D[Z],{method:"set",arguments:[K,q]}];return _=X(Y),!0},apply(D,K,q){let G=D[F],M=D[Z],Y=W();if(G){let E=M[M.length-1].arguments[0];return M.pop(),X(M)[E](...q)}return Y[Z].push(...M,{method:"apply",arguments:q}),new Proxy(Y,v)}};return new Proxy(W(),v)},P=({scriptToken:B,webhookURL:H,isAsync:z,argv:N})=>{let Q=JSON.stringify({Context:{argv:N}}),J=I.parse(H);J.base=z?"task":"sync_task";let $=I.format(J);return fetch($,{method:"post",headers:{"Content-Type":"application/json","AirScript-Token":B},body:Q})},_=null,S=async()=>_,h=async(B,H,z)=>{return B[U][Z].push({method:"set",arguments:[H,z]}),B},w=(B)=>{let H=new URL("https://www.kdocs.cn/api/v3/script/task");return H.searchParams.append("task_id",B),fetch(H)},V=(B)=>{let{status:H,data:z}=B;if(console.log("===result==="),z?.result)console.log(z?.result);let N=z?.logs.filter((J)=>J.filename!=="<system>");if(N.length!==0){console.log("===console===");for(let J of N)console[J.level](...J.args)}let Q=z?.logs.at(-1).unix_time-z?.logs[1].unix_time;console.log("runtime:",Q),console.log("status:",H)},x=(B)=>{let{error:H,error_details:z,errno:N,result:Q,msg:J,reason:$}=B;if(H){let X=Error(z.msg,{cause:`${z.stack.join(`
2
+ `)}
3
+ unix_time:${z.unix_time}`});throw X.name=`Remote ${z.name}`,X}if("errno"in B){let X=Error(Q,{cause:`${J}
4
+ ${$}`});throw X.name=`Remote Errno ${N}`,X}},j=(B)=>{return A("./return.wpsjs.json",JSON.stringify(B,void 0,2))};export{j as writeLogFileToCurrent,S as setValueOk,h as setValue,w as queryTask,R as initRemoteCallWpsjsGlobal,P as execution};
package/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { InfoItem, RemoteCallWpsjsGlobalReturn, WpsjsGlobalApi } from './types'
1
+ import type { InfoItem, RemoteCallWpsjsGlobalReturn, WpsjsGlobalApi } from 'tadcode-wpsjs:global'
2
2
  import { writeFile } from 'fs/promises'
3
3
  import path from 'path'
4
4
 
@@ -15,58 +15,63 @@ interface Config {
15
15
  writeLogFile?: boolean
16
16
  }
17
17
 
18
- const infoSymbol = Symbol('info')
19
- const isThenSymbol = Symbol('then')
18
+ const infoSymbol = Symbol('info-tacode')
19
+ const promiseTagSymbol = Symbol('then-tacode')
20
+ const rawSymbol = Symbol('raw-tacode')
21
+ const promiseTypeObj = { then: 1, catch: 1, finally: 1 }
22
+
23
+ type ProxyTarget = { (): void;[infoSymbol]: InfoItem[], [promiseTagSymbol]: boolean }
20
24
 
21
25
  const initRemoteCallWpsjsGlobal = (config: Config) => {
22
26
  const { scriptToken, webhookURL, isAsync = false, printLog = false, writeLogFile = false, } = config
23
- type ProxyTarget = { (): void;[infoSymbol]: InfoItem[], [isThenSymbol]: boolean }
24
-
27
+ if (!scriptToken || !webhookURL) { throw new Error('scriptToken and webhookURL are both required') }
28
+ const handleResponse = async (response: Response) => {
29
+ const responseObj = await response.json()
30
+ if (writeLogFile) await writeLogFileToCurrent(responseObj)
31
+ handleError(responseObj)
32
+ if (printLog) printInfo(responseObj)
33
+ return responseObj['data']?.['result']
34
+ }
35
+ const startExecution = async (info: InfoItem[]) =>
36
+ execution({ scriptToken, webhookURL, isAsync, argv: { info } }).then(handleResponse)
37
+ const createProxyTarget = () => {
38
+ const func: ProxyTarget = () => { }
39
+ func[promiseTagSymbol] = false
40
+ func[infoSymbol] = []
41
+ return func
42
+ }
25
43
  const handle: ProxyHandler<ProxyTarget> = {
26
- get(target, p: string, _receiver) {
27
- const oldInfo = target[infoSymbol] ??= []
28
- const func: ProxyTarget = () => { }
29
- func[isThenSymbol] = false
30
- func[infoSymbol] = [...oldInfo]
31
- if (p !== 'then')
32
- func[infoSymbol].push({ method: 'get', arguments: [p] })
33
- else
34
- func[isThenSymbol] = true
44
+ get(target, p, _receiver) {
45
+ if (p === rawSymbol) { return target }
46
+ const oldInfo = target[infoSymbol]
47
+ const func = createProxyTarget()
48
+ const info = func[infoSymbol]
49
+ info.push(...oldInfo)
50
+ if (p in promiseTypeObj) func[promiseTagSymbol] = true
51
+ info.push({ method: 'get', arguments: [p as string] })
35
52
  return new Proxy(func, handle)
36
53
  },
37
54
  set(target, p, newValue, _receiver) {
38
- const oldInfo = target[infoSymbol] ??= []
39
- const info = [...oldInfo, { method: 'set', arguments: [p, newValue] }]
40
- setValuePromise = execution({ scriptToken, webhookURL, isAsync, argv: { info } })
41
- .then(async (response) => {
42
- const responseObj = await response.json()
43
- if (printLog) printInfo(responseObj)
44
- if (writeLogFile) await writeLogFileToCurrent(responseObj)
45
- return responseObj?.['data']['result']
46
- })
55
+ const oldInfo = target[infoSymbol]
56
+ const info: InfoItem[] = [...oldInfo, { method: 'set', arguments: [p, newValue] }]
57
+ setValuePromise = startExecution(info)
47
58
  return true
48
59
  },
49
60
  apply(target, _thisArg, argArray) {
50
- if (!target[isThenSymbol]) {
51
- const oldInfo = target[infoSymbol] ??= []
52
- const func: ProxyTarget = () => { }
53
- func[isThenSymbol] = false
54
- func[infoSymbol] = [...oldInfo, { method: 'apply', arguments: argArray }]
55
- return new Proxy(func, handle)
56
- } else {
57
- const info = target[infoSymbol]
58
- return execution({ scriptToken, webhookURL, isAsync, argv: { info } })
59
- .then(async (response) => {
60
- const responseObj = await response.json()
61
- if (printLog) printInfo(responseObj)
62
- if (writeLogFile) await writeLogFileToCurrent(responseObj)
63
- return responseObj?.['data']['result']
64
- })
65
- .then(...argArray)
61
+ const isCallPromise = target[promiseTagSymbol]
62
+ const info = target[infoSymbol]
63
+ const func = createProxyTarget()
64
+ if (isCallPromise) {
65
+ const last = info[info.length - 1]
66
+ const p = last.arguments[0] as 'then'
67
+ info.pop()
68
+ return startExecution(info)[p](...argArray)
66
69
  }
70
+ func[infoSymbol].push(...info, { method: 'apply', arguments: argArray })
71
+ return new Proxy(func, handle)
67
72
  },
68
73
  }
69
- return new Proxy(() => { }, handle) as unknown as WpsjsGlobalApi
74
+ return new Proxy(createProxyTarget(), handle) as unknown as WpsjsGlobalApi
70
75
  }
71
76
 
72
77
  type ExecutionConfig = Pick<Config, 'scriptToken' | 'webhookURL' | 'isAsync'> & { argv?: Record<string | number, any> }
@@ -91,6 +96,18 @@ const execution = ({ scriptToken, webhookURL, isAsync, argv }: ExecutionConfig)
91
96
  let setValuePromise: any = null
92
97
  /* 远程调用的赋值操作返回的promise */
93
98
  const setValueOk = async () => setValuePromise
99
+ /**赋值 */
100
+ const setValue = async <T extends Promise<any>>(
101
+ promiseObj: T,
102
+ p: keyof Awaited<T>,
103
+ newValue: Awaited<T>[keyof Awaited<T>],
104
+ ) => {
105
+ const obj = promiseObj as Awaited<T>
106
+ const func = obj[rawSymbol] as ProxyTarget
107
+ const info = func[infoSymbol]
108
+ info.push({ method: 'set', arguments: [p as string, newValue] })
109
+ return promiseObj
110
+ }
94
111
 
95
112
  const queryTask = (id: string) => {
96
113
  const url = new URL('https://www.kdocs.cn/api/v3/script/task')
@@ -99,36 +116,44 @@ const queryTask = (id: string) => {
99
116
  }
100
117
 
101
118
  const printInfo = (remoteCallResponse: RemoteCallWpsjsGlobalReturn) => {
102
- const responseData = remoteCallResponse as RemoteCallWpsjsGlobalReturn
103
- const { status, data, error, error_details } = responseData
104
- console.log('status:', status)
105
- const time = data.logs.at(-1)!.unix_time - data.logs[1].unix_time
106
- console.log('runtime:', time)
107
- if (error) {
108
- console.error(error_details.name)
109
- console.error(error_details.msg)
110
- console.error(error_details.stack)
111
- }
112
- const userInfo = data.logs.filter(x => x.filename !== '<system>')
119
+ const { status, data, } = remoteCallResponse as RemoteCallWpsjsGlobalReturn
120
+ console.log('===result===')
121
+ if (data?.result) { console.log(data?.result) }
122
+ const userInfo = data?.logs.filter(x => x.filename !== '<system>')
113
123
  if (userInfo.length !== 0) {
114
- console.log('log:')
124
+ console.log('===console===')
115
125
  for (const item of userInfo) {
116
126
  console[item.level](...item.args)
117
127
  }
118
128
  }
119
- console.log('result:')
120
- console.log(data.result)
121
- return responseData
129
+ const time = data?.logs.at(-1)!.unix_time - data?.logs[1].unix_time
130
+ console.log('runtime:', time)
131
+ console.log('status:', status)
132
+ }
133
+
134
+ const handleError = (remoteCallResponse: RemoteCallWpsjsGlobalReturn) => {
135
+ const { error, error_details, errno, result, msg, reason } = remoteCallResponse as RemoteCallWpsjsGlobalReturn
136
+ if (error) {
137
+ const normalErr = new Error(error_details.msg, { cause: `${error_details.stack.join('\n')}\nunix_time:${error_details.unix_time}` })
138
+ normalErr.name = `Remote ${error_details.name}`
139
+ throw normalErr
140
+ }
141
+ if ('errno' in remoteCallResponse) {
142
+ const err = new Error(result, { cause: `${msg}\n${reason}` })
143
+ err.name = `Remote Errno ${errno}`
144
+ throw err
145
+ }
122
146
  }
123
147
 
124
148
  const writeLogFileToCurrent = (data: object) => {
125
- return writeFile('./wpsjs.log.json', JSON.stringify((data), undefined, 2))
149
+ return writeFile('./return.wpsjs.json', JSON.stringify((data), undefined, 2))
126
150
  }
127
151
 
128
152
  export {
129
- execution,
130
153
  initRemoteCallWpsjsGlobal,
154
+ execution,
131
155
  queryTask,
132
156
  setValueOk,
157
+ setValue,
133
158
  writeLogFileToCurrent,
134
159
  }
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "tadcode-wpsjs",
3
- "version": "1.1.0",
4
- "main": "index.js",
3
+ "version": "1.2.1",
5
4
  "type": "module",
6
5
  "scripts": {
7
6
  "hot": "NODE_ENV=development bun --hot ignore/index.ts",
8
7
  "dev": "NODE_ENV=development bun --watch index.ts",
9
- "build-main": "NODE_ENV=production bun build index.ts --target node --minify --outfile index.js",
10
- "build-remotecode": "NODE_ENV=production bun build remoteCode/index.js --target browser --minify --outfile remoteCode/index.min.js"
8
+ "build:main": "NODE_ENV=production bun build index.ts --target node --minify --outfile index.js",
9
+ "build:remotecode": "NODE_ENV=production bun build remoteCode/index.js --target browser --minify --outfile remoteCode/index.min.js"
11
10
  },
12
11
  "devDependencies": {
13
12
  "@types/bun": "latest"
@@ -17,20 +16,8 @@
17
16
  ],
18
17
  "exports": {
19
18
  ".": {
20
- "import": "./index.js",
21
- "types": "./index.ts"
22
- },
23
- "./types": {
24
- "types": "./types/index.d.ts"
25
- },
26
- "./types/DB_Application": {
27
- "types": "./types/DB_Application.d.ts"
28
- },
29
- "./types/KSDrive": {
30
- "types": "./types/KSDrive.d.ts"
31
- },
32
- "./types/KSheet_Application": {
33
- "types": "./types/KSheet_Application.d.ts"
19
+ "types": "./types/index.d.ts",
20
+ "import": "./index.js"
34
21
  }
35
22
  }
36
23
  }
@@ -1,23 +1,23 @@
1
- /* version 0.2 */
2
- const { info } = Context.argv
3
- let peviousTemp = undefined
4
- let current = globalThis
5
- for (const item of info) {
6
- switch (item.method) {
7
- case 'get': {
8
- peviousTemp = current
9
- const [k] = item.arguments
10
- current = Reflect.get(current, k)
11
- } break
12
- case 'set': {
13
- const [k, v] = item.arguments
14
- current = Reflect.set(current, k, v)
15
- } break
16
- case 'apply': {
17
- current = Reflect.apply(current, peviousTemp, item.arguments)
18
- } break
19
- default:
20
- throw Error('method must be get or apply')
21
- }
22
- }
23
- return current
1
+ /* version 0.2.1 */
2
+ const { info } = Context.argv
3
+ let peviousTemp = undefined
4
+ let current = globalThis
5
+ for (const item of info) {
6
+ switch (item.method) {
7
+ case 'get': {
8
+ peviousTemp = current
9
+ const [k] = item.arguments
10
+ current = Reflect.get(current, k)
11
+ } break
12
+ case 'set': {
13
+ const [k, v] = item.arguments
14
+ current = Reflect.set(current, k, v)
15
+ } break
16
+ case 'apply': {
17
+ current = Reflect.apply(current, peviousTemp, item.arguments)
18
+ } break
19
+ default:
20
+ throw Error('The method must be get, set, or apply')
21
+ }
22
+ }
23
+ return current
@@ -0,0 +1,72 @@
1
+ {
2
+ "data": {
3
+ "logs": [
4
+ {
5
+ "filename": "<system>",
6
+ "timestamp": "04:19:17.543",
7
+ "unix_time": 1772396357543,
8
+ "level": "info",
9
+ "args": [
10
+ "脚本环境(1.0)初始化..."
11
+ ]
12
+ },
13
+ {
14
+ "filename": "<system>",
15
+ "timestamp": "04:19:18.519",
16
+ "unix_time": 1772396358519,
17
+ "level": "info",
18
+ "args": [
19
+ "已开始执行"
20
+ ]
21
+ },
22
+ {
23
+ "filename": "未命名脚本文件.js:9:15",
24
+ "timestamp": "04:19:18.537",
25
+ "unix_time": 1772396358537,
26
+ "level": "info",
27
+ "args": [
28
+ "[\"Application\"]"
29
+ ]
30
+ },
31
+ {
32
+ "filename": "未命名脚本文件.js:9:15",
33
+ "timestamp": "04:19:18.537",
34
+ "unix_time": 1772396358537,
35
+ "level": "info",
36
+ "args": [
37
+ "[\"ActiveView\"]"
38
+ ]
39
+ },
40
+ {
41
+ "filename": "未命名脚本文件.js:9:15",
42
+ "timestamp": "04:19:18.539",
43
+ "unix_time": 1772396358539,
44
+ "level": "info",
45
+ "args": [
46
+ "[\"Records\"]"
47
+ ]
48
+ },
49
+ {
50
+ "filename": "未命名脚本文件.js:9:15",
51
+ "timestamp": "04:19:18.542",
52
+ "unix_time": 1772396358542,
53
+ "level": "info",
54
+ "args": [
55
+ "[\"Select\"]"
56
+ ]
57
+ }
58
+ ],
59
+ "result": null
60
+ },
61
+ "error": "Cannot read properties of undefined (reading 'getRecordViewRow')",
62
+ "error_details": {
63
+ "name": "TypeError",
64
+ "msg": "Cannot read properties of undefined (reading 'getRecordViewRow')",
65
+ "stack": [
66
+ "",
67
+ " at 未命名脚本文件.js:18:31"
68
+ ],
69
+ "unix_time": 1772396358544
70
+ },
71
+ "status": "finished"
72
+ }
@@ -1,72 +1,72 @@
1
- import type DB_Application from './DB_Application'
2
- import type KSheet_Application from './KSheet_Application'
3
-
4
- interface FileType {
5
- /**智能文档 */
6
- AP: 'o'
7
- /**智能表格 */
8
- KSheet: 'k'
9
- /**表格 */
10
- ET: 's'
11
- /**多维表 */
12
- DB: 'd'
13
- }
14
-
15
- /**
16
- * 文件类型
17
- * - 'o': 智能文档
18
- * - 'k': 智能表格
19
- * - 's': 表格
20
- * - 'd': 多维表
21
- */
22
- type FileTypeValue = FileType[keyof FileType]
23
-
24
- interface CreateOptions {
25
- /**是 新文件的文件名 */
26
- name: string
27
- /**否 新文件的文件目录 */
28
- dirUrl?: string
29
- /**否 将目标文件另存为新文件 */
30
- source?: string
31
- }
32
-
33
- interface FilesInfo {
34
- files: FileInfo[]
35
- nextOffset: number
36
- }
37
-
38
- interface FileInfo {
39
- /** 文件名 */
40
- fileName: string
41
- /** 加密后的文件 id */
42
- fileId: string
43
- /** 文件创建时间戳 */
44
- createTime: number
45
- /** 文件修改时间戳 */
46
- updateTime: number
47
- }
48
-
49
- export type { FileType, FileTypeValue, CreateOptions, FilesInfo, FileInfo }
50
-
51
- export default interface KSDrive {
52
- FileType: FileType
53
- /**
54
- * 创建文件
55
- * @param type 新文件的类型
56
- * @param createOptions 新文件的参数选项
57
- * @returns 新文件url
58
- */
59
- createFile(type: FileTypeValue, createOptions: CreateOptions): string
60
-
61
- openFile(url: string): {
62
- Application: KSheet_Application & DB_Application
63
- close()
64
- }
65
-
66
- listFiles(options?: {
67
- dirUrl?: string
68
- offset?: number
69
- count?: number
70
- includeExts?: string[]
71
- }): FilesInfo
72
- }
1
+ declare module 'tadcode-wpsjs:global' {
2
+ import type DBApplication from 'application:datatable'
3
+ interface FileType {
4
+ /**智能文档 */
5
+ AP: 'o'
6
+ /**智能表格 */
7
+ KSheet: 'k'
8
+ /**表格 */
9
+ ET: 's'
10
+ /**多维表 */
11
+ DB: 'd'
12
+ }
13
+
14
+ /**
15
+ * 文件类型
16
+ * - 'o': 智能文档
17
+ * - 'k': 智能表格
18
+ * - 's': 表格
19
+ * - 'd': 多维表
20
+ */
21
+ type FileTypeValue = FileType[keyof FileType]
22
+
23
+ interface CreateOptions {
24
+ /**是 新文件的文件名 */
25
+ name: string
26
+ /**否 新文件的文件目录 */
27
+ dirUrl?: string
28
+ /**否 将目标文件另存为新文件 */
29
+ source?: string
30
+ }
31
+
32
+ interface FilesInfo {
33
+ files: FileInfo[]
34
+ nextOffset: number
35
+ }
36
+
37
+ interface FileInfo {
38
+ /** 文件名 */
39
+ fileName: string
40
+ /** 加密后的文件 id */
41
+ fileId: string
42
+ /** 文件创建时间戳 */
43
+ createTime: number
44
+ /** 文件修改时间戳 */
45
+ updateTime: number
46
+ }
47
+
48
+ interface KSDrive {
49
+ FileType: FileType
50
+ /**
51
+ * 创建文件
52
+ * @param type 新文件的类型
53
+ * @param createOptions 新文件的参数选项
54
+ * @returns 新文件url
55
+ */
56
+ createFile(type: FileTypeValue, createOptions: CreateOptions): string
57
+
58
+ openFile(url: string): {
59
+ Application: DB_Application
60
+ close()
61
+ }
62
+
63
+ listFiles(options?: {
64
+ dirUrl?: string
65
+ offset?: number
66
+ count?: number
67
+ includeExts?: string[]
68
+ }): FilesInfo
69
+ }
70
+
71
+ export type { KSDrive, FileTypeValue }
72
+ }