cloudcc-cli 2.3.7 → 2.3.9

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 (65) hide show
  1. package/.cursor/skills/{cloudcc-cli-dev → dev-guide}/SKILL.md +5 -1
  2. package/README.md +65 -1
  3. package/cloudcc-dev-skill/SKILL.md +78 -0
  4. package/cloudcc-dev-skill/config.json +4 -0
  5. package/mcp/index.js +25 -2
  6. package/mcp/tools/Object Fields Creator/handler.js +149 -3
  7. package/package.json +1 -1
  8. package/src/classes/create.js +10 -0
  9. package/src/fields/buildFieldData.js +692 -0
  10. package/src/fields/create.js +10 -170
  11. package/src/fields/detail.js +37 -0
  12. package/src/fields/docs/devguide.md +168 -44
  13. package/src/fields/docs/introduction.md +2 -0
  14. package/src/fields/fields/A.js +3 -2
  15. package/src/fields/fields/AD.js +4 -2
  16. package/src/fields/fields/B.js +8 -5
  17. package/src/fields/fields/C.js +13 -5
  18. package/src/fields/fields/D.js +4 -4
  19. package/src/fields/fields/E.js +10 -5
  20. package/src/fields/fields/ENC.js +27 -8
  21. package/src/fields/fields/ENCD.js +27 -8
  22. package/src/fields/fields/F.js +4 -4
  23. package/src/fields/fields/FL.js +8 -4
  24. package/src/fields/fields/H.js +4 -4
  25. package/src/fields/fields/IMG.js +23 -5
  26. package/src/fields/fields/J.js +21 -6
  27. package/src/fields/fields/L.js +32 -8
  28. package/src/fields/fields/LT.js +23 -6
  29. package/src/fields/fields/M.js +2 -2
  30. package/src/fields/fields/MR.js +2 -2
  31. package/src/fields/fields/N.js +31 -8
  32. package/src/fields/fields/P.js +13 -5
  33. package/src/fields/fields/Q.js +42 -12
  34. package/src/fields/fields/S.js +19 -7
  35. package/src/fields/fields/SCORE.js +9 -4
  36. package/src/fields/fields/T.js +4 -4
  37. package/src/fields/fields/U.js +18 -5
  38. package/src/fields/fields/X.js +20 -6
  39. package/src/fields/fields/Y.js +17 -4
  40. package/src/fields/index.js +2 -0
  41. package/src/fields/update.js +148 -0
  42. package/test/fields.cli.test.js +3 -1
  43. package/utils/config.js +9 -0
  44. package/utils/utils.js +12 -5
  45. package/.cursor/skills/cloudcc-dev-skill/SKILL.md +0 -71
  46. package/target/classes/com/cloudcc/core/BaseException.class +0 -0
  47. package/target/classes/com/cloudcc/core/BusiException.class +0 -0
  48. package/target/classes/com/cloudcc/core/CCObject.class +0 -0
  49. package/target/classes/com/cloudcc/core/CCSchedule.class +0 -0
  50. package/target/classes/com/cloudcc/core/CCService.class +0 -0
  51. package/target/classes/com/cloudcc/core/CCTrigger.class +0 -0
  52. package/target/classes/com/cloudcc/core/CCTriggerHandler.class +0 -0
  53. package/target/classes/com/cloudcc/core/DevLogger.class +0 -0
  54. package/target/classes/com/cloudcc/core/OperatationEnum.class +0 -0
  55. package/target/classes/com/cloudcc/core/PeakInterf.class +0 -0
  56. package/target/classes/com/cloudcc/core/SendEmail.class +0 -0
  57. package/target/classes/com/cloudcc/core/ServiceResult.class +0 -0
  58. package/target/classes/com/cloudcc/core/StringUtils.class +0 -0
  59. package/target/classes/com/cloudcc/core/TimeUtil.class +0 -0
  60. package/target/classes/com/cloudcc/core/Tool$1.class +0 -0
  61. package/target/classes/com/cloudcc/core/Tool.class +0 -0
  62. package/target/classes/com/cloudcc/core/TriggerInvoker.class +0 -0
  63. package/target/classes/com/cloudcc/core/TriggerMethod.class +0 -0
  64. package/target/classes/com/cloudcc/core/TriggerTimeEnum.class +0 -0
  65. package/target/classes/com/cloudcc/core/UserInfo.class +0 -0
@@ -0,0 +1,692 @@
1
+ const briefGet = require("../brief/get");
2
+ const { labelToSlug } = require("../../utils/utils");
3
+ const S = require("./fields/S");
4
+ const U = require("./fields/U");
5
+ const SCORE = require("./fields/SCORE");
6
+ const IMG = require("./fields/IMG");
7
+ const P = require("./fields/P");
8
+ const C = require("./fields/C");
9
+ const J = require("./fields/J");
10
+ const H = require("./fields/H");
11
+ const E = require("./fields/E");
12
+ const B = require("./fields/B");
13
+ const A = require("./fields/A");
14
+ const D = require("./fields/D");
15
+ const F = require("./fields/F");
16
+ const T = require("./fields/T");
17
+ const N = require("./fields/N");
18
+ const ENC = require("./fields/ENC");
19
+ const ENCD = require("./fields/ENCD");
20
+ const X = require("./fields/X");
21
+ const L = require("./fields/L");
22
+ const Q = require("./fields/Q");
23
+ const AD = require("./fields/AD");
24
+ const LT = require("./fields/LT");
25
+ const FL = require("./fields/FL");
26
+ const Y = require("./fields/Y");
27
+ const MR = require("./fields/MR");
28
+ const M = require("./fields/M");
29
+
30
+ /**
31
+ * 百分比(P)、币种(C):整数位 + 小数位须为非负整数且总和 ≤ 18
32
+ * @param {string} typeName 用于错误信息,如 "P" 或 "C"
33
+ */
34
+ /** 所有类型统一:argvs[7+b]=helps,argvs[8+b]=defaultValue;类型专属参数从 argvs[9+b] 起 */
35
+ function readHelpsDefault(argvs, b) {
36
+ let helps = argvs[7 + b];
37
+ let defaultValue = argvs[8 + b];
38
+ if (helps === undefined || helps === null) helps = "";
39
+ if (defaultValue === undefined || defaultValue === null) defaultValue = "";
40
+ return { helps, defaultValue };
41
+ }
42
+
43
+ /** J 文本区(长):最大字符数,整数 1~32000 */
44
+ function validateJFieldLength(schemefieldLength) {
45
+ const n = parseInt(String(schemefieldLength).trim(), 10);
46
+ if (!Number.isFinite(n) || n < 1 || n > 32000) {
47
+ throw new Error(
48
+ "J field: schemefieldLength (max multiline characters) must be an integer between 1 and 32000"
49
+ );
50
+ }
51
+ }
52
+
53
+ /** X 文本区:最大字符数(平台常见上限 4000,以 saveField 校验为准) */
54
+ function validateXFieldLength(schemefieldLength) {
55
+ const n = parseInt(String(schemefieldLength).trim(), 10);
56
+ if (!Number.isFinite(n) || n < 1 || n > 4000) {
57
+ throw new Error(
58
+ "X field: schemefieldLength (max multiline characters) must be an integer between 1 and 4000"
59
+ );
60
+ }
61
+ }
62
+
63
+ /** SCORE:最大评分(星星个数),整数 1~100 */
64
+ function validateScoreFieldLength(schemefieldLength) {
65
+ const n = parseInt(String(schemefieldLength).trim(), 10);
66
+ if (!Number.isFinite(n) || n < 1 || n > 100) {
67
+ throw new Error(
68
+ "SCORE field: schemefieldLength (max score / number of stars) must be an integer between 1 and 100"
69
+ );
70
+ }
71
+ }
72
+
73
+ /** IMG:可上传图片数量(obj.defaultValue),整数 1~100 */
74
+ function validateImgUploadCount(defaultValue) {
75
+ const n = parseInt(String(defaultValue).trim(), 10);
76
+ if (!Number.isFinite(n) || n < 1 || n > 100) {
77
+ throw new Error(
78
+ "IMG field: defaultValue (max number of images to upload) must be an integer between 1 and 100"
79
+ );
80
+ }
81
+ }
82
+
83
+ /** FL:可上传文件数量(obj.defaultValue 与 obj.isrepeat 同步),整数 1~100 */
84
+ function validateFlUploadCount(defaultValue) {
85
+ const n = parseInt(String(defaultValue).trim(), 10);
86
+ if (!Number.isFinite(n) || n < 1 || n > 100) {
87
+ throw new Error(
88
+ "FL field: defaultValue (max number of files to upload) must be an integer between 1 and 100"
89
+ );
90
+ }
91
+ }
92
+
93
+ function normalizeImgFormulaType(raw) {
94
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "input";
95
+ const t = String(raw).trim().toLowerCase();
96
+ if (t === "url" || t === "input") return t;
97
+ throw new Error('IMG field: formulaType must be "url" or "input"');
98
+ }
99
+
100
+ function normalizeImgWatermarkstatus(raw) {
101
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "0";
102
+ const s = String(raw).trim();
103
+ if (s === "0" || s === "1") return s;
104
+ throw new Error('IMG field: watermarkstatus must be "0" or "1"');
105
+ }
106
+
107
+ /** L:是否使用全局选项列表 */
108
+ function normalizeLUseGlobalSelect(raw) {
109
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "0";
110
+ const s = String(raw).trim();
111
+ return s === "1" ? "1" : "0";
112
+ }
113
+
114
+ /** L:obj.edittype,radio 或 select */
115
+ function normalizeLEditType(raw) {
116
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "select";
117
+ const t = String(raw).trim().toLowerCase();
118
+ if (t === "radio" || t === "select") return t;
119
+ throw new Error('L field: edittype must be "radio" or "select"');
120
+ }
121
+
122
+ /** L:isPicklistSorted / defPl,"0" 或 "1" */
123
+ function normalizeL01(raw) {
124
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "0";
125
+ const s = String(raw).trim();
126
+ return s === "1" ? "1" : "0";
127
+ }
128
+
129
+ /** Q:obj.visibleLines,下拉最多展示行数,整数 1~100,默认 4 */
130
+ function normalizeQVisibleLines(raw) {
131
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "4";
132
+ const n = parseInt(String(raw).trim(), 10);
133
+ if (!Number.isFinite(n) || n < 1 || n > 100) {
134
+ throw new Error(
135
+ "Q field: visibleLines (max visible lines in dropdown) must be an integer between 1 and 100"
136
+ );
137
+ }
138
+ return String(n);
139
+ }
140
+
141
+ /** ENC / ENCD:`obj.schemefieldLength`,整数 1~255 */
142
+ function validateEncEncdSchemefieldLength(schemefieldLength) {
143
+ const n = parseInt(String(schemefieldLength).trim(), 10);
144
+ if (!Number.isFinite(n) || n < 1 || n > 255) {
145
+ throw new Error("ENC/ENCD field: schemefieldLength must be an integer between 1 and 255");
146
+ }
147
+ }
148
+
149
+ /** ENC / ENCD:all | 4 | card | custom */
150
+ function normalizeEncEncdMasktype(raw) {
151
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "all";
152
+ const t = String(raw).trim().toLowerCase();
153
+ if (t === "all") return "all";
154
+ if (t === "4") return "4";
155
+ if (t === "card") return "card";
156
+ if (t === "custom") return "custom";
157
+ throw new Error('ENC/ENCD field: masktype must be "all", "4", "card", or "custom"');
158
+ }
159
+
160
+ /** ENC / ENCD:custom 时可为自定义规则;非 custom 时通常为空 */
161
+ function normalizeEncEncdEncrypttype(raw, masktype) {
162
+ if (masktype === "custom") {
163
+ if (raw === undefined || raw === null || String(raw).trim() === "") {
164
+ return "{AAAA}{****}{AAAA}";
165
+ }
166
+ return String(raw);
167
+ }
168
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "";
169
+ return String(raw);
170
+ }
171
+
172
+ /** ENC / ENCD:* 或 X */
173
+ function normalizeEncEncdMaskcharacter(raw) {
174
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "*";
175
+ const c = String(raw).trim();
176
+ if (c === "*" || c === "X") return c;
177
+ throw new Error('ENC/ENCD field: maskcharacter must be "*" or "X"');
178
+ }
179
+
180
+ /** LT:经纬度展示 `1` 数字,`2` 度分秒 */
181
+ function normalizeLtDisplayType(raw) {
182
+ if (raw === undefined || raw === null || String(raw).trim() === "") return "1";
183
+ const s = String(raw).trim();
184
+ return s === "2" ? "2" : "1";
185
+ }
186
+
187
+ function validateCurrencyLikePrecision(schemefieldLength, decimalPlaces, typeName) {
188
+ const intN = parseInt(String(schemefieldLength).trim(), 10);
189
+ const fracN = parseInt(String(decimalPlaces).trim(), 10);
190
+ if (!Number.isFinite(intN) || intN < 0 || !Number.isFinite(fracN) || fracN < 0) {
191
+ throw new Error(`${typeName} field: schemefieldLength and decimalPlaces must be non-negative integers`);
192
+ }
193
+ if (intN + fracN > 18) {
194
+ throw new Error(
195
+ `${typeName} field: schemefieldLength (integer digits, ${intN}) + decimalPlaces (${fracN}) must not exceed 18`
196
+ );
197
+ }
198
+ }
199
+
200
+ /**
201
+ * 按字段类型组装保存请求体(与 create 一致,不含 layoutIds / obj.id)。
202
+ * @param {string[]} argvs
203
+ * @param {{ shift?: number }} options
204
+ * - shift=0:`cloudcc create fields` — type=argvs[3], remark=argvs[6];helps=argvs[7], defaultValue=argvs[8];专属参数从 argvs[9] 起
205
+ * - shift=1:`cloudcc update fields` — fieldId=argvs[3], type=argvs[4], remark=argvs[7];helps=argvs[8], defaultValue=argvs[9];专属从 argvs[10] 起
206
+ */
207
+ async function buildFieldData(argvs, { shift = 0 } = {}) {
208
+ const b = shift;
209
+ let fieldData = null;
210
+ const fieldType = argvs[3 + b];
211
+ const objid = argvs[4 + b];
212
+ const nameLabel = argvs[5 + b];
213
+
214
+ if (fieldType == "S") {
215
+ const slug = labelToSlug(nameLabel);
216
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
217
+ let briefData = await briefGet(argvs);
218
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
219
+ let rawSchemeFieldLength = argvs[9 + b];
220
+ let rawIsRepeat = argvs[10 + b];
221
+ let rawPlaceholder = argvs[11 + b];
222
+ let rawCasesensitive = argvs[12 + b];
223
+
224
+ let schemefieldLength = rawSchemeFieldLength;
225
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
226
+ schemefieldLength = "255";
227
+ }
228
+
229
+ let isrepeat = rawIsRepeat;
230
+ if (isrepeat === undefined || isrepeat === null || String(isrepeat).trim() === "") {
231
+ isrepeat = "true";
232
+ }
233
+
234
+ let placeholder = rawPlaceholder;
235
+ if (placeholder === undefined || placeholder === null) placeholder = "";
236
+
237
+ const isRepeatFalse = String(isrepeat).trim().toLowerCase() === "false";
238
+ let casesensitive = "";
239
+ if (isRepeatFalse) {
240
+ casesensitive = rawCasesensitive;
241
+ if (casesensitive === undefined || casesensitive === null || String(casesensitive).trim() === "") {
242
+ casesensitive = "false";
243
+ }
244
+ }
245
+
246
+ fieldData = S(
247
+ objid,
248
+ nameLabel,
249
+ apiname,
250
+ schemefieldLength,
251
+ helps,
252
+ isrepeat,
253
+ casesensitive,
254
+ placeholder,
255
+ defaultValue,
256
+ briefData.data
257
+ );
258
+ } else if (fieldType == "U") {
259
+ const slug = labelToSlug(nameLabel);
260
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
261
+ let briefData = await briefGet(argvs);
262
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
263
+ let rawEdittype = argvs[9 + b];
264
+
265
+ let edittype = rawEdittype;
266
+ if (edittype === undefined || edittype === null || String(edittype).trim() === "") {
267
+ edittype = "_blank";
268
+ }
269
+
270
+ fieldData = U(objid, nameLabel, apiname, helps, edittype, defaultValue, briefData.data);
271
+ } else if (fieldType == "SCORE") {
272
+ const slug = labelToSlug(nameLabel);
273
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
274
+ let briefData = await briefGet(argvs);
275
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
276
+ let rawLen = argvs[9 + b];
277
+ let schemefieldLength = rawLen;
278
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
279
+ schemefieldLength = "10";
280
+ }
281
+ validateScoreFieldLength(schemefieldLength);
282
+ fieldData = SCORE(objid, nameLabel, apiname, helps, defaultValue, schemefieldLength, briefData.data);
283
+ } else if (fieldType == "IMG") {
284
+ const slug = labelToSlug(nameLabel);
285
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
286
+ let briefData = await briefGet(argvs);
287
+ const { helps, defaultValue: rawDefaultValue } = readHelpsDefault(argvs, b);
288
+ let defaultValue = rawDefaultValue;
289
+ if (defaultValue === undefined || defaultValue === null || String(defaultValue).trim() === "") {
290
+ defaultValue = "3";
291
+ }
292
+ validateImgUploadCount(defaultValue);
293
+ const formulaType = normalizeImgFormulaType(argvs[9 + b]);
294
+ const watermarkstatus = normalizeImgWatermarkstatus(argvs[10 + b]);
295
+ fieldData = IMG(
296
+ objid,
297
+ nameLabel,
298
+ apiname,
299
+ helps,
300
+ defaultValue,
301
+ briefData.data,
302
+ formulaType,
303
+ watermarkstatus
304
+ );
305
+ } else if (fieldType == "P") {
306
+ const slug = labelToSlug(nameLabel);
307
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
308
+ let briefData = await briefGet(argvs);
309
+ let rawHelps = argvs[7 + b];
310
+ let rawDefaultValue = argvs[8 + b];
311
+ let rawSchemefieldLength = argvs[9 + b];
312
+ let rawDecimalPlaces = argvs[10 + b];
313
+
314
+ let helps = rawHelps;
315
+ if (helps === undefined || helps === null) helps = "";
316
+
317
+ let defaultValue = rawDefaultValue;
318
+ if (defaultValue === undefined || defaultValue === null) defaultValue = "";
319
+
320
+ let schemefieldLength = rawSchemefieldLength;
321
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
322
+ schemefieldLength = "10";
323
+ }
324
+
325
+ let decimalPlaces = rawDecimalPlaces;
326
+ if (decimalPlaces === undefined || decimalPlaces === null || String(decimalPlaces).trim() === "") {
327
+ decimalPlaces = "2";
328
+ }
329
+
330
+ validateCurrencyLikePrecision(schemefieldLength, decimalPlaces, "P");
331
+
332
+ fieldData = P(objid, nameLabel, apiname, helps, defaultValue, schemefieldLength, decimalPlaces, briefData.data);
333
+ } else if (fieldType == "C") {
334
+ const slug = labelToSlug(nameLabel);
335
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
336
+ let briefData = await briefGet(argvs);
337
+ let rawHelps = argvs[7 + b];
338
+ let rawDefaultValue = argvs[8 + b];
339
+ let rawSchemefieldLength = argvs[9 + b];
340
+ let rawDecimalPlaces = argvs[10 + b];
341
+
342
+ let helps = rawHelps;
343
+ if (helps === undefined || helps === null) helps = "";
344
+
345
+ let defaultValue = rawDefaultValue;
346
+ if (defaultValue === undefined || defaultValue === null) defaultValue = "";
347
+
348
+ let schemefieldLength = rawSchemefieldLength;
349
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
350
+ schemefieldLength = "10";
351
+ }
352
+
353
+ let decimalPlaces = rawDecimalPlaces;
354
+ if (decimalPlaces === undefined || decimalPlaces === null || String(decimalPlaces).trim() === "") {
355
+ decimalPlaces = "2";
356
+ }
357
+
358
+ validateCurrencyLikePrecision(schemefieldLength, decimalPlaces, "C");
359
+
360
+ fieldData = C(objid, nameLabel, apiname, helps, defaultValue, schemefieldLength, decimalPlaces, briefData.data);
361
+ } else if (fieldType == "J") {
362
+ const slug = labelToSlug(nameLabel);
363
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
364
+ let briefData = await briefGet(argvs);
365
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
366
+ let rawLen = argvs[9 + b];
367
+ let rawPlaceholder = argvs[10 + b];
368
+ let schemefieldLength = rawLen;
369
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
370
+ schemefieldLength = "32000";
371
+ }
372
+ validateJFieldLength(schemefieldLength);
373
+ let placeholder = rawPlaceholder;
374
+ if (placeholder === undefined || placeholder === null) placeholder = "";
375
+ fieldData = J(objid, nameLabel, apiname, helps, defaultValue, schemefieldLength, placeholder, briefData.data);
376
+ } else if (fieldType == "H") {
377
+ const slug = labelToSlug(nameLabel);
378
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
379
+ let briefData = await briefGet(argvs);
380
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
381
+ fieldData = H(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
382
+ } else if (fieldType == "E") {
383
+ const slug = labelToSlug(nameLabel);
384
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
385
+ let briefData = await briefGet(argvs);
386
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
387
+ let rawIsrepeat = argvs[9 + b];
388
+ let isrepeat = rawIsrepeat;
389
+ if (isrepeat === undefined || isrepeat === null || String(isrepeat).trim() === "") {
390
+ isrepeat = "true";
391
+ }
392
+ fieldData = E(objid, nameLabel, apiname, helps, defaultValue, isrepeat, briefData.data);
393
+ } else if (fieldType == "B") {
394
+ const slug = labelToSlug(nameLabel);
395
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
396
+ let briefData = await briefGet(argvs);
397
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
398
+ fieldData = B(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
399
+ } else if (fieldType == "A") {
400
+ const slug = labelToSlug(nameLabel);
401
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
402
+ let briefData = await briefGet(argvs);
403
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
404
+ fieldData = A(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
405
+ } else if (fieldType == "D") {
406
+ const slug = labelToSlug(nameLabel);
407
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
408
+ let briefData = await briefGet(argvs);
409
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
410
+ fieldData = D(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
411
+ } else if (fieldType == "F") {
412
+ const slug = labelToSlug(nameLabel);
413
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
414
+ let briefData = await briefGet(argvs);
415
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
416
+ fieldData = F(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
417
+ } else if (fieldType == "T") {
418
+ const slug = labelToSlug(nameLabel);
419
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
420
+ let briefData = await briefGet(argvs);
421
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
422
+ fieldData = T(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
423
+ } else if (fieldType == "N") {
424
+ const slug = labelToSlug(nameLabel);
425
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
426
+ let briefData = await briefGet(argvs);
427
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
428
+ let rawSchemefieldLength = argvs[9 + b];
429
+ let rawDecimalPlaces = argvs[10 + b];
430
+ let rawIsrepeat = argvs[11 + b];
431
+ let rawDisplayThousands = argvs[12 + b];
432
+
433
+ let schemefieldLength = rawSchemefieldLength;
434
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
435
+ schemefieldLength = "10";
436
+ }
437
+
438
+ let decimalPlaces = rawDecimalPlaces;
439
+ if (decimalPlaces === undefined || decimalPlaces === null || String(decimalPlaces).trim() === "") {
440
+ decimalPlaces = "0";
441
+ }
442
+
443
+ validateCurrencyLikePrecision(schemefieldLength, decimalPlaces, "N");
444
+
445
+ let isrepeat = rawIsrepeat;
446
+ if (isrepeat === undefined || isrepeat === null || String(isrepeat).trim() === "") {
447
+ isrepeat = "true";
448
+ }
449
+
450
+ let displayThousands = rawDisplayThousands;
451
+ if (displayThousands === undefined || displayThousands === null || String(displayThousands).trim() === "") {
452
+ displayThousands = "0";
453
+ }
454
+
455
+ fieldData = N(
456
+ objid,
457
+ nameLabel,
458
+ apiname,
459
+ helps,
460
+ defaultValue,
461
+ schemefieldLength,
462
+ decimalPlaces,
463
+ isrepeat,
464
+ displayThousands,
465
+ briefData.data
466
+ );
467
+ } else if (fieldType == "ENC" || fieldType == "ENCD") {
468
+ const slug = labelToSlug(nameLabel);
469
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
470
+ let briefData = await briefGet(argvs);
471
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
472
+ let rawLen = argvs[9 + b];
473
+ let schemefieldLength = rawLen;
474
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
475
+ schemefieldLength = "255";
476
+ }
477
+ validateEncEncdSchemefieldLength(schemefieldLength);
478
+ const masktype = normalizeEncEncdMasktype(argvs[10 + b]);
479
+ const encrypttype = normalizeEncEncdEncrypttype(argvs[11 + b], masktype);
480
+ const maskcharacter = normalizeEncEncdMaskcharacter(argvs[12 + b]);
481
+ const slStr = String(parseInt(String(schemefieldLength).trim(), 10));
482
+ if (fieldType == "ENC") {
483
+ fieldData = ENC(
484
+ objid,
485
+ nameLabel,
486
+ apiname,
487
+ helps,
488
+ defaultValue,
489
+ briefData.data,
490
+ slStr,
491
+ masktype,
492
+ encrypttype,
493
+ maskcharacter
494
+ );
495
+ } else {
496
+ fieldData = ENCD(
497
+ objid,
498
+ nameLabel,
499
+ apiname,
500
+ helps,
501
+ defaultValue,
502
+ briefData.data,
503
+ slStr,
504
+ masktype,
505
+ encrypttype,
506
+ maskcharacter
507
+ );
508
+ }
509
+ } else if (fieldType == "X") {
510
+ const slug = labelToSlug(nameLabel);
511
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
512
+ let briefData = await briefGet(argvs);
513
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
514
+ let rawLen = argvs[9 + b];
515
+ let rawPlaceholder = argvs[10 + b];
516
+ let schemefieldLength = rawLen;
517
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
518
+ schemefieldLength = "255";
519
+ }
520
+ validateXFieldLength(schemefieldLength);
521
+ let placeholder = rawPlaceholder;
522
+ if (placeholder === undefined || placeholder === null) placeholder = "";
523
+ fieldData = X(objid, nameLabel, apiname, helps, defaultValue, schemefieldLength, placeholder, briefData.data);
524
+ } else if (fieldType == "L") {
525
+ const slug = labelToSlug(nameLabel);
526
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
527
+ let briefData = await briefGet(argvs);
528
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
529
+ let ptext = argvs[9 + b];
530
+ if (ptext === undefined || ptext === null) ptext = "";
531
+ else ptext = String(ptext);
532
+ const useGlobalSelect = normalizeLUseGlobalSelect(argvs[10 + b]);
533
+ const edittype = normalizeLEditType(argvs[11 + b]);
534
+ const isPicklistSorted = normalizeL01(argvs[12 + b]);
535
+ const defPl = normalizeL01(argvs[13 + b]);
536
+ let globalSelectId = argvs[14 + b];
537
+ if (globalSelectId === undefined || globalSelectId === null) globalSelectId = "";
538
+ else globalSelectId = String(globalSelectId).trim();
539
+ if (useGlobalSelect === "0") {
540
+ if (!ptext.trim()) {
541
+ throw new Error(
542
+ `Missing ptext: expected argvs[${9 + b}] when useGlobalSelect is "0" (remark is argvs[${6 + b}])`
543
+ );
544
+ }
545
+ } else if (!globalSelectId) {
546
+ throw new Error(
547
+ `L field: globalSelectId is required when useGlobalSelect is "1" (argvs[${14 + b}])`
548
+ );
549
+ }
550
+ fieldData = L(
551
+ objid,
552
+ nameLabel,
553
+ apiname,
554
+ ptext,
555
+ helps,
556
+ defaultValue,
557
+ briefData.data,
558
+ useGlobalSelect,
559
+ edittype,
560
+ isPicklistSorted,
561
+ defPl,
562
+ globalSelectId
563
+ );
564
+ } else if (fieldType == "Q") {
565
+ const slug = labelToSlug(nameLabel);
566
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
567
+ let briefData = await briefGet(argvs);
568
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
569
+ let ptext = argvs[9 + b];
570
+ if (ptext === undefined || ptext === null) ptext = "";
571
+ else ptext = String(ptext);
572
+ const useGlobalSelect = normalizeLUseGlobalSelect(argvs[10 + b]);
573
+ const edittype = normalizeLEditType(argvs[11 + b]);
574
+ const isPicklistSorted = normalizeL01(argvs[12 + b]);
575
+ const defPl = normalizeL01(argvs[13 + b]);
576
+ let globalSelectId = argvs[14 + b];
577
+ if (globalSelectId === undefined || globalSelectId === null) globalSelectId = "";
578
+ else globalSelectId = String(globalSelectId).trim();
579
+ if (useGlobalSelect === "0") {
580
+ if (!ptext.trim()) {
581
+ throw new Error(
582
+ `Missing ptext: expected argvs[${9 + b}] when useGlobalSelect is "0" (remark is argvs[${6 + b}])`
583
+ );
584
+ }
585
+ } else if (!globalSelectId) {
586
+ throw new Error(
587
+ `Q field: globalSelectId is required when useGlobalSelect is "1" (argvs[${14 + b}])`
588
+ );
589
+ }
590
+ const visibleLines = normalizeQVisibleLines(argvs[15 + b]);
591
+ const showalloptions = normalizeL01(argvs[16 + b]);
592
+ fieldData = Q(
593
+ objid,
594
+ nameLabel,
595
+ apiname,
596
+ ptext,
597
+ helps,
598
+ defaultValue,
599
+ briefData.data,
600
+ useGlobalSelect,
601
+ edittype,
602
+ isPicklistSorted,
603
+ defPl,
604
+ globalSelectId,
605
+ visibleLines,
606
+ showalloptions
607
+ );
608
+ } else if (fieldType == "AD") {
609
+ const slug = labelToSlug(nameLabel);
610
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
611
+ let briefData = await briefGet(argvs);
612
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
613
+ fieldData = AD(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
614
+ } else if (fieldType == "LT") {
615
+ const slug = labelToSlug(nameLabel);
616
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
617
+ let briefData = await briefGet(argvs);
618
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
619
+ let schemefieldLength = argvs[9 + b];
620
+ let decimalPlaces = argvs[10 + b];
621
+ if (schemefieldLength === undefined || schemefieldLength === null || String(schemefieldLength).trim() === "") {
622
+ schemefieldLength = "8";
623
+ }
624
+ if (decimalPlaces === undefined || decimalPlaces === null || String(decimalPlaces).trim() === "") {
625
+ decimalPlaces = "10";
626
+ }
627
+ validateCurrencyLikePrecision(schemefieldLength, decimalPlaces, "LT");
628
+ const displayType = normalizeLtDisplayType(argvs[11 + b]);
629
+ fieldData = LT(
630
+ objid,
631
+ nameLabel,
632
+ apiname,
633
+ helps,
634
+ defaultValue,
635
+ briefData.data,
636
+ schemefieldLength,
637
+ decimalPlaces,
638
+ displayType
639
+ );
640
+ } else if (fieldType == "FL") {
641
+ const slug = labelToSlug(nameLabel);
642
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
643
+ let briefData = await briefGet(argvs);
644
+ const { helps, defaultValue: rawDefaultValue } = readHelpsDefault(argvs, b);
645
+ let defaultValue = rawDefaultValue;
646
+ if (defaultValue === undefined || defaultValue === null || String(defaultValue).trim() === "") {
647
+ defaultValue = "1";
648
+ }
649
+ validateFlUploadCount(defaultValue);
650
+ fieldData = FL(objid, nameLabel, apiname, helps, defaultValue, briefData.data);
651
+ } else if (fieldType == "Y") {
652
+ const slug = labelToSlug(nameLabel);
653
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
654
+ let briefData = await briefGet(argvs);
655
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
656
+ let lookupObj = argvs[9 + b];
657
+ if (!lookupObj) throw new Error(`Missing lookupObj: expected argvs[${9 + b}] (remark is argvs[${6 + b}])`);
658
+ let lookupObjDefaultField = argvs[10 + b];
659
+ if (lookupObjDefaultField === undefined || lookupObjDefaultField === null) lookupObjDefaultField = "";
660
+ else lookupObjDefaultField = String(lookupObjDefaultField).trim();
661
+ fieldData = Y(
662
+ objid,
663
+ nameLabel,
664
+ apiname,
665
+ lookupObj,
666
+ helps,
667
+ defaultValue,
668
+ briefData.data,
669
+ lookupObjDefaultField
670
+ );
671
+ } else if (fieldType == "MR") {
672
+ const slug = labelToSlug(nameLabel);
673
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
674
+ let briefData = await briefGet(argvs);
675
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
676
+ let lookupObj = argvs[9 + b];
677
+ if (!lookupObj) throw new Error(`Missing lookupObj: expected argvs[${9 + b}] (remark is argvs[${6 + b}])`);
678
+ fieldData = MR(objid, nameLabel, apiname, lookupObj, helps, defaultValue, briefData.data);
679
+ } else if (fieldType == "M") {
680
+ const slug = labelToSlug(nameLabel);
681
+ let apiname = `${slug}_custom_${fieldType}_field`.toLowerCase();
682
+ let briefData = await briefGet(argvs);
683
+ const { helps, defaultValue } = readHelpsDefault(argvs, b);
684
+ let lookupObj = argvs[9 + b];
685
+ if (!lookupObj) throw new Error(`Missing lookupObj: expected argvs[${9 + b}] (remark is argvs[${6 + b}])`);
686
+ fieldData = M(objid, nameLabel, apiname, lookupObj, helps, defaultValue, briefData.data);
687
+ }
688
+
689
+ return fieldData;
690
+ }
691
+
692
+ module.exports = { buildFieldData };