tadcode-wpsjs 1.1.1 → 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.
Files changed (40) hide show
  1. package/README.md +19 -15
  2. package/index.js +4 -1
  3. package/index.ts +59 -52
  4. package/package.json +5 -18
  5. package/remoteCode/index.js +23 -23
  6. package/return.wpsjs.json +72 -0
  7. package/types/KSDrive.d.ts +72 -72
  8. package/types/TypeTools.d.ts +53 -0
  9. package/types/application/CriteriaValue.d.ts +31 -0
  10. package/types/application/Field.d.ts +25 -0
  11. package/types/application/FieldApi.d.ts +212 -0
  12. package/types/application/Fields.d.ts +20 -0
  13. package/types/application/Record.d.ts +22 -0
  14. package/types/application/RecordApi.d.ts +178 -0
  15. package/types/application/RecordRange.d.ts +77 -0
  16. package/types/application/Records.d.ts +28 -0
  17. package/types/application/SelectionApi.d.ts +29 -0
  18. package/types/application/Sheet.d.ts +73 -0
  19. package/types/application/SheetApi.d.ts +62 -0
  20. package/types/application/Sheets.d.ts +88 -0
  21. package/types/application/View.d.ts +51 -0
  22. package/types/application/ViewApi.d.ts +26 -0
  23. package/types/application/Views.d.ts +36 -0
  24. package/types/application/global.d.ts +28 -0
  25. package/types/application/index.d.ts +27 -0
  26. package/types/global.d.ts +36 -0
  27. package/types/index.d.ts +4 -64
  28. package/types/return.response.d.ts +34 -0
  29. package/types/DB_Application.d.ts +0 -49
  30. package/types/DB_Application_Field.d.ts +0 -212
  31. package/types/DB_Application_Plus/index.d.ts +0 -7
  32. package/types/DB_Application_Plus/record.d.ts +0 -33
  33. package/types/DB_Application_Plus/records.d.ts +0 -58
  34. package/types/DB_Application_Plus/sheet.d.ts +0 -137
  35. package/types/DB_Application_Plus/sheets.d.ts +0 -113
  36. package/types/DB_Application_Record.d.ts +0 -178
  37. package/types/DB_Application_Selection.ts +0 -22
  38. package/types/DB_Application_Sheet.d.ts +0 -63
  39. package/types/DB_Application_View.d.ts +0 -24
  40. package/types/type-tools.ts +0 -50
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
 
@@ -87,3 +84,10 @@ console.log(data)
87
84
  ## 支持
88
85
 
89
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
 
@@ -16,60 +16,62 @@ interface Config {
16
16
  }
17
17
 
18
18
  const infoSymbol = Symbol('info-tacode')
19
- const isThenSymbol = Symbol('then-tacode')
19
+ const promiseTagSymbol = Symbol('then-tacode')
20
20
  const rawSymbol = Symbol('raw-tacode')
21
+ const promiseTypeObj = { then: 1, catch: 1, finally: 1 }
21
22
 
22
- type ProxyTarget = { (): void;[infoSymbol]: InfoItem[], [isThenSymbol]: boolean }
23
+ type ProxyTarget = { (): void;[infoSymbol]: InfoItem[], [promiseTagSymbol]: boolean }
23
24
 
24
25
  const initRemoteCallWpsjsGlobal = (config: Config) => {
25
26
  const { scriptToken, webhookURL, isAsync = false, printLog = false, writeLogFile = false, } = config
26
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
+ }
27
43
  const handle: ProxyHandler<ProxyTarget> = {
28
44
  get(target, p, _receiver) {
29
45
  if (p === rawSymbol) { return target }
30
- const oldInfo = target[infoSymbol] ??= []
31
- const func: ProxyTarget = () => { }
32
- func[isThenSymbol] = false
33
- func[infoSymbol] = [...oldInfo]
34
- if (p !== 'then')
35
- func[infoSymbol].push({ method: 'get', arguments: [p as string] })
36
- else
37
- func[isThenSymbol] = true
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] })
38
52
  return new Proxy(func, handle)
39
53
  },
40
54
  set(target, p, newValue, _receiver) {
41
- const oldInfo = target[infoSymbol] ??= []
42
- const info = [...oldInfo, { method: 'set', arguments: [p, newValue] }]
43
- setValuePromise = execution({ scriptToken, webhookURL, isAsync, argv: { info } })
44
- .then(async (response) => {
45
- const responseObj = await response.json()
46
- if (printLog) printInfo(responseObj)
47
- if (writeLogFile) await writeLogFileToCurrent(responseObj)
48
- return responseObj?.['data']['result']
49
- })
55
+ const oldInfo = target[infoSymbol]
56
+ const info: InfoItem[] = [...oldInfo, { method: 'set', arguments: [p, newValue] }]
57
+ setValuePromise = startExecution(info)
50
58
  return true
51
59
  },
52
60
  apply(target, _thisArg, argArray) {
53
- if (!target[isThenSymbol]) {
54
- const oldInfo = target[infoSymbol] ??= []
55
- const func: ProxyTarget = () => { }
56
- func[isThenSymbol] = false
57
- func[infoSymbol] = [...oldInfo, { method: 'apply', arguments: argArray }]
58
- return new Proxy(func, handle)
59
- } else {
60
- const info = target[infoSymbol]
61
- return execution({ scriptToken, webhookURL, isAsync, argv: { info } })
62
- .then(async (response) => {
63
- const responseObj = await response.json()
64
- if (printLog) printInfo(responseObj)
65
- if (writeLogFile) await writeLogFileToCurrent(responseObj)
66
- return responseObj?.['data']['result']
67
- })
68
- .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)
69
69
  }
70
+ func[infoSymbol].push(...info, { method: 'apply', arguments: argArray })
71
+ return new Proxy(func, handle)
70
72
  },
71
73
  }
72
- return new Proxy(() => { }, handle) as unknown as WpsjsGlobalApi
74
+ return new Proxy(createProxyTarget(), handle) as unknown as WpsjsGlobalApi
73
75
  }
74
76
 
75
77
  type ExecutionConfig = Pick<Config, 'scriptToken' | 'webhookURL' | 'isAsync'> & { argv?: Record<string | number, any> }
@@ -114,37 +116,42 @@ const queryTask = (id: string) => {
114
116
  }
115
117
 
116
118
  const printInfo = (remoteCallResponse: RemoteCallWpsjsGlobalReturn) => {
117
- const responseData = remoteCallResponse as RemoteCallWpsjsGlobalReturn
118
- const { status, data, error, error_details } = responseData
119
+ const { status, data, } = remoteCallResponse as RemoteCallWpsjsGlobalReturn
119
120
  console.log('===result===')
120
- console.log(data.result)
121
- const userInfo = data.logs.filter(x => x.filename !== '<system>')
121
+ if (data?.result) { console.log(data?.result) }
122
+ const userInfo = data?.logs.filter(x => x.filename !== '<system>')
122
123
  if (userInfo.length !== 0) {
123
124
  console.log('===console===')
124
125
  for (const item of userInfo) {
125
126
  console[item.level](...item.args)
126
127
  }
127
128
  }
128
- if (error) {
129
- console.log('===error===')
130
- console.error(error_details.name)
131
- console.error(error_details.msg)
132
- console.error(error_details.stack)
133
- console.error(error_details.unix_time)
134
- }
135
- const time = data.logs.at(-1)!.unix_time - data.logs[1].unix_time
129
+ const time = data?.logs.at(-1)!.unix_time - data?.logs[1].unix_time
136
130
  console.log('runtime:', time)
137
131
  console.log('status:', status)
138
- return responseData
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
+ }
139
146
  }
140
147
 
141
148
  const writeLogFileToCurrent = (data: object) => {
142
- return writeFile('./wpsjs.log.json', JSON.stringify((data), undefined, 2))
149
+ return writeFile('./return.wpsjs.json', JSON.stringify((data), undefined, 2))
143
150
  }
144
151
 
145
152
  export {
146
- execution,
147
153
  initRemoteCallWpsjsGlobal,
154
+ execution,
148
155
  queryTask,
149
156
  setValueOk,
150
157
  setValue,
package/package.json CHANGED
@@ -1,13 +1,12 @@
1
1
  {
2
2
  "name": "tadcode-wpsjs",
3
- "version": "1.1.1",
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
+ }
@@ -0,0 +1,53 @@
1
+ declare module 'tadcode-wpsjs:typetools' {
2
+ /**根据给的对象,添加execution方法 */
3
+ type WithExecution<T> = T extends (...args: infer A) => infer R
4
+ ? ((...args: A) => WithExecution<R>) & { execution: () => Promise<R> }
5
+ : T extends object
6
+ ? { [K in keyof T]: WithExecution<T[K]> } & { execution: () => Promise<T> }
7
+ : T & { execution: () => Promise<T> }
8
+
9
+ /**部分可选 */
10
+ type MakePropertyOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>
11
+
12
+ /**选取修改类型 */
13
+ type PickModify<T, K extends keyof T, M> = {
14
+ [P in K]: M
15
+ }
16
+
17
+ /**
18
+ * 深度可选工具类型
19
+ */
20
+ type DeepPartial<T> = T extends object
21
+ ? { [K in keyof T]?: DeepPartial<T[K]> }
22
+ : T
23
+
24
+ /**去掉联合类型对象中的id */
25
+ type DistributiveOmit<T, K extends PropertyKey> =
26
+ T extends any ? Omit<T, K> : never
27
+
28
+ /**根据给的对象,添加promise方法 */
29
+ type WithPromise<T> =
30
+ T extends (...args: infer A) => infer R ?
31
+ ((...args: A) => WithPromise<R>) & Promise<T> & { [K in keyof T]: WithPromise<T[K]> } :
32
+ T extends Array<infer U> ?
33
+ Array<WithPromise<U>> & Promise<T> :
34
+ T extends object ?
35
+ { [K in keyof T]: WithPromise<T[K]> } & Promise<T> :
36
+ T extends boolean ?
37
+ Promise<boolean> :
38
+ T extends number ?
39
+ Promise<number> :
40
+ T extends string ?
41
+ Promise<string> :
42
+ Promise<T>
43
+
44
+ // 搞定!🎉
45
+ export type {
46
+ WithExecution,
47
+ MakePropertyOptional,
48
+ PickModify,
49
+ DeepPartial,
50
+ DistributiveOmit,
51
+ WithPromise,
52
+ }
53
+ }