@carthooks/arcubase-cli 0.1.1 → 0.1.3

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 (105) hide show
  1. package/bundle/arcubase-admin.mjs +911 -10
  2. package/bundle/arcubase.mjs +911 -10
  3. package/dist/runtime/command_registry.d.ts +8 -0
  4. package/dist/runtime/command_registry.d.ts.map +1 -1
  5. package/dist/runtime/command_registry.js +35 -0
  6. package/dist/runtime/entity_save_schema.d.ts +15 -0
  7. package/dist/runtime/entity_save_schema.d.ts.map +1 -0
  8. package/dist/runtime/entity_save_schema.js +641 -0
  9. package/dist/runtime/env.d.ts +1 -0
  10. package/dist/runtime/env.d.ts.map +1 -1
  11. package/dist/runtime/env.js +1 -0
  12. package/dist/runtime/errors.d.ts +10 -0
  13. package/dist/runtime/errors.d.ts.map +1 -1
  14. package/dist/runtime/execute.d.ts.map +1 -1
  15. package/dist/runtime/execute.js +89 -10
  16. package/dist/runtime/http.d.ts +1 -1
  17. package/dist/runtime/http.d.ts.map +1 -1
  18. package/dist/runtime/http.js +3 -0
  19. package/dist/runtime/zod_registry.d.ts +6 -0
  20. package/dist/runtime/zod_registry.d.ts.map +1 -1
  21. package/dist/runtime/zod_registry.js +133 -0
  22. package/dist/tests/bootstrap.test.js +5 -0
  23. package/dist/tests/command_registry.test.js +5 -0
  24. package/dist/tests/entity_save_schema.test.d.ts +2 -0
  25. package/dist/tests/entity_save_schema.test.d.ts.map +1 -0
  26. package/dist/tests/entity_save_schema.test.js +221 -0
  27. package/dist/tests/execute_validation.test.js +453 -1
  28. package/dist/tests/help.test.js +33 -0
  29. package/package.json +1 -1
  30. package/sdk-dist/docs/runtime-reference/README.md +177 -0
  31. package/sdk-dist/docs/runtime-reference/entity-schema/README.md +120 -0
  32. package/sdk-dist/docs/runtime-reference/entity-schema/address.md +34 -0
  33. package/sdk-dist/docs/runtime-reference/entity-schema/boolean.md +37 -0
  34. package/sdk-dist/docs/runtime-reference/entity-schema/button.md +47 -0
  35. package/sdk-dist/docs/runtime-reference/entity-schema/checkbox.md +61 -0
  36. package/sdk-dist/docs/runtime-reference/entity-schema/datasets.md +35 -0
  37. package/sdk-dist/docs/runtime-reference/entity-schema/datetime.md +40 -0
  38. package/sdk-dist/docs/runtime-reference/entity-schema/department.md +33 -0
  39. package/sdk-dist/docs/runtime-reference/entity-schema/departments.md +34 -0
  40. package/sdk-dist/docs/runtime-reference/entity-schema/divider.md +39 -0
  41. package/sdk-dist/docs/runtime-reference/entity-schema/file.md +44 -0
  42. package/sdk-dist/docs/runtime-reference/entity-schema/formula.md +44 -0
  43. package/sdk-dist/docs/runtime-reference/entity-schema/image.md +43 -0
  44. package/sdk-dist/docs/runtime-reference/entity-schema/linkto.md +67 -0
  45. package/sdk-dist/docs/runtime-reference/entity-schema/location.md +32 -0
  46. package/sdk-dist/docs/runtime-reference/entity-schema/lookup.md +41 -0
  47. package/sdk-dist/docs/runtime-reference/entity-schema/member.md +37 -0
  48. package/sdk-dist/docs/runtime-reference/entity-schema/members.md +31 -0
  49. package/sdk-dist/docs/runtime-reference/entity-schema/number.md +70 -0
  50. package/sdk-dist/docs/runtime-reference/entity-schema/query.md +50 -0
  51. package/sdk-dist/docs/runtime-reference/entity-schema/radio.md +53 -0
  52. package/sdk-dist/docs/runtime-reference/entity-schema/relation.md +55 -0
  53. package/sdk-dist/docs/runtime-reference/entity-schema/relationfield.md +38 -0
  54. package/sdk-dist/docs/runtime-reference/entity-schema/rollup.md +54 -0
  55. package/sdk-dist/docs/runtime-reference/entity-schema/select.md +63 -0
  56. package/sdk-dist/docs/runtime-reference/entity-schema/selects.md +51 -0
  57. package/sdk-dist/docs/runtime-reference/entity-schema/serialnumber.md +48 -0
  58. package/sdk-dist/docs/runtime-reference/entity-schema/signature.md +31 -0
  59. package/sdk-dist/docs/runtime-reference/entity-schema/status.md +70 -0
  60. package/sdk-dist/docs/runtime-reference/entity-schema/subform.md +74 -0
  61. package/sdk-dist/docs/runtime-reference/entity-schema/tags.md +19 -0
  62. package/sdk-dist/docs/runtime-reference/entity-schema/text.md +76 -0
  63. package/sdk-dist/docs/runtime-reference/entity-schema/textarea.md +47 -0
  64. package/sdk-dist/docs/runtime-reference/entity-schema/workflow_status.md +17 -0
  65. package/sdk-dist/docs/runtime-reference/entity-schema.md +197 -0
  66. package/sdk-dist/docs/runtime-reference/examples/README.md +51 -0
  67. package/sdk-dist/docs/runtime-reference/examples/crm-01/README.md +20 -0
  68. package/sdk-dist/docs/runtime-reference/examples/mes-01/README.md +21 -0
  69. package/sdk-dist/docs/runtime-reference/examples/oms-01/README.md +164 -0
  70. package/sdk-dist/docs/runtime-reference/examples/oms-01/app-overview.md +79 -0
  71. package/sdk-dist/docs/runtime-reference/examples/oms-01/create-app.json +3 -0
  72. package/sdk-dist/docs/runtime-reference/examples/oms-01/goods-receipt.create-entity.json +3 -0
  73. package/sdk-dist/docs/runtime-reference/examples/oms-01/goods-receipt.schema.json +159 -0
  74. package/sdk-dist/docs/runtime-reference/examples/oms-01/item-master.create-entity.json +3 -0
  75. package/sdk-dist/docs/runtime-reference/examples/oms-01/item-master.schema.json +179 -0
  76. package/sdk-dist/docs/runtime-reference/examples/oms-01/picking-list.create-entity.json +3 -0
  77. package/sdk-dist/docs/runtime-reference/examples/oms-01/picking-list.schema.json +168 -0
  78. package/sdk-dist/docs/runtime-reference/examples/oms-01/purchase-order.create-entity.json +3 -0
  79. package/sdk-dist/docs/runtime-reference/examples/oms-01/purchase-order.schema.json +417 -0
  80. package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.bulk-update.json +22 -0
  81. package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.create-entity.json +3 -0
  82. package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.query.json +10 -0
  83. package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.row.insert.json +28 -0
  84. package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.schema.json +398 -0
  85. package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.selection.condition.json +13 -0
  86. package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.selection.ids.json +7 -0
  87. package/sdk-dist/docs/runtime-reference/examples/oms-01/stock-issue.create-entity.json +3 -0
  88. package/sdk-dist/docs/runtime-reference/examples/oms-01/stock-issue.schema.json +137 -0
  89. package/sdk-dist/docs/runtime-reference/examples/wms-01/README.md +21 -0
  90. package/sdk-dist/docs/runtime-reference/row-crud.md +186 -0
  91. package/sdk-dist/docs/runtime-reference/search-and-bulk-actions.md +494 -0
  92. package/sdk-dist/docs/runtime-reference/table-lifecycle.md +123 -0
  93. package/sdk-dist/docs/runtime-reference/workflow/README.md +19 -0
  94. package/src/runtime/command_registry.ts +47 -0
  95. package/src/runtime/entity_save_schema.ts +708 -0
  96. package/src/runtime/env.ts +2 -0
  97. package/src/runtime/errors.ts +11 -0
  98. package/src/runtime/execute.ts +123 -10
  99. package/src/runtime/http.ts +4 -1
  100. package/src/runtime/zod_registry.ts +154 -0
  101. package/src/tests/bootstrap.test.ts +5 -0
  102. package/src/tests/command_registry.test.ts +6 -0
  103. package/src/tests/entity_save_schema.test.ts +236 -0
  104. package/src/tests/execute_validation.test.ts +601 -1
  105. package/src/tests/help.test.ts +39 -0
@@ -0,0 +1,236 @@
1
+ import test from 'node:test'
2
+ import assert from 'node:assert/strict'
3
+ import { getBodySchema } from '../runtime/zod_registry.js'
4
+
5
+ const schema = getBodySchema('EntitySaveReqVO')
6
+
7
+ function buildMinimalField(id = 1001) {
8
+ return {
9
+ id,
10
+ label: '订单号',
11
+ type: 'text',
12
+ required: true,
13
+ unique: false,
14
+ editable: true,
15
+ visible: true,
16
+ show_label: true,
17
+ scannable: false,
18
+ default_value_mode: 0,
19
+ description: '',
20
+ value: null,
21
+ number_decimal: 0,
22
+ depends: [],
23
+ key: 'order_id',
24
+ code_index: false,
25
+ options: {},
26
+ transfers: null,
27
+ children: null,
28
+ }
29
+ }
30
+
31
+ test('EntitySaveReqVO accepts fields as array', () => {
32
+ assert.ok(schema)
33
+ const parsed = schema!.safeParse({
34
+ id: 2188889845,
35
+ app_id: 2188889844,
36
+ name: '订单',
37
+ schema_version: 1,
38
+ field_id_seq: 1002,
39
+ layout: [[1001]],
40
+ fields: [buildMinimalField()],
41
+ workflow_enabled: false,
42
+ })
43
+ assert.equal(parsed.success, true)
44
+ })
45
+
46
+ test('EntitySaveReqVO rejects fields as object', () => {
47
+ assert.ok(schema)
48
+ const parsed = schema!.safeParse({
49
+ name: '订单',
50
+ fields: {
51
+ order_id: {
52
+ id: 1001,
53
+ label: '订单号',
54
+ },
55
+ },
56
+ })
57
+ assert.equal(parsed.success, false)
58
+ })
59
+
60
+ test('EntitySaveReqVO rejects field_id_seq not greater than max field id', () => {
61
+ assert.ok(schema)
62
+ const parsed = schema!.safeParse({
63
+ field_id_seq: 1001,
64
+ layout: [[1001]],
65
+ fields: [buildMinimalField(1001)],
66
+ })
67
+ assert.equal(parsed.success, false)
68
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'field_id_seq'))
69
+ })
70
+
71
+ test('EntitySaveReqVO rejects layout unknown top-level field id', () => {
72
+ assert.ok(schema)
73
+ const parsed = schema!.safeParse({
74
+ field_id_seq: 1002,
75
+ layout: [[9999]],
76
+ fields: [buildMinimalField(1001)],
77
+ })
78
+ assert.equal(parsed.success, false)
79
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'layout.0.0'))
80
+ })
81
+
82
+ test('EntitySaveReqVO rejects non-subform field children', () => {
83
+ assert.ok(schema)
84
+ const parsed = schema!.safeParse({
85
+ field_id_seq: 1003,
86
+ layout: [[1001]],
87
+ fields: [{
88
+ ...buildMinimalField(1001),
89
+ children: [buildMinimalField(1002)],
90
+ }],
91
+ })
92
+ assert.equal(parsed.success, false)
93
+ })
94
+
95
+ test('EntitySaveReqVO requires status options items', () => {
96
+ assert.ok(schema)
97
+ const parsed = schema!.safeParse({
98
+ field_id_seq: 1002,
99
+ layout: [[1001]],
100
+ fields: [{
101
+ ...buildMinimalField(1001),
102
+ type: 'status',
103
+ options: {},
104
+ }],
105
+ })
106
+ assert.equal(parsed.success, false)
107
+ })
108
+
109
+ test('EntitySaveReqVO requires serialnumber parts', () => {
110
+ assert.ok(schema)
111
+ const parsed = schema!.safeParse({
112
+ field_id_seq: 1002,
113
+ layout: [[1001]],
114
+ fields: [{
115
+ ...buildMinimalField(1001),
116
+ type: 'serialnumber',
117
+ options: {},
118
+ }],
119
+ })
120
+ assert.equal(parsed.success, false)
121
+ })
122
+
123
+ test('EntitySaveReqVO requires lookup relation structure', () => {
124
+ assert.ok(schema)
125
+ const parsed = schema!.safeParse({
126
+ field_id_seq: 1002,
127
+ layout: [[1001]],
128
+ fields: [{
129
+ ...buildMinimalField(1001),
130
+ type: 'lookup',
131
+ options: {},
132
+ }],
133
+ })
134
+ assert.equal(parsed.success, false)
135
+ })
136
+
137
+ test('EntitySaveReqVO requires relationfield relation app and entity ids', () => {
138
+ assert.ok(schema)
139
+ const parsed = schema!.safeParse({
140
+ field_id_seq: 1002,
141
+ layout: [[1001]],
142
+ fields: [{
143
+ ...buildMinimalField(1001),
144
+ type: 'relationfield',
145
+ options: {
146
+ relation: {},
147
+ },
148
+ }],
149
+ })
150
+ assert.equal(parsed.success, false)
151
+ })
152
+
153
+ test('EntitySaveReqVO requires rollup relation and aggregation formula', () => {
154
+ assert.ok(schema)
155
+ const parsed = schema!.safeParse({
156
+ field_id_seq: 1002,
157
+ layout: [[1001]],
158
+ fields: [{
159
+ ...buildMinimalField(1001),
160
+ type: 'rollup',
161
+ options: {
162
+ relation: {
163
+ local_linkto_field_id: 1009,
164
+ target_field_id: 1010,
165
+ target_field_type: 'number',
166
+ },
167
+ },
168
+ }],
169
+ })
170
+ assert.equal(parsed.success, false)
171
+ })
172
+
173
+ test('EntitySaveReqVO rejects subform layout that references non-child field id', () => {
174
+ assert.ok(schema)
175
+ const parsed = schema!.safeParse({
176
+ field_id_seq: 1004,
177
+ layout: [[1001]],
178
+ fields: [{
179
+ ...buildMinimalField(1001),
180
+ type: 'subform',
181
+ children: [buildMinimalField(1002)],
182
+ layout: [[1003]],
183
+ }],
184
+ })
185
+ assert.equal(parsed.success, false)
186
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'fields.0.layout.0.0'))
187
+ })
188
+
189
+ test('EntitySaveReqVO rejects lookup local_linkto_field_id that does not point to linkto field', () => {
190
+ assert.ok(schema)
191
+ const parsed = schema!.safeParse({
192
+ field_id_seq: 1004,
193
+ layout: [[1001], [1002]],
194
+ fields: [
195
+ buildMinimalField(1001),
196
+ {
197
+ ...buildMinimalField(1002),
198
+ type: 'lookup',
199
+ options: {
200
+ relation: {
201
+ local_linkto_field_id: 1001,
202
+ target_field_id: 2001,
203
+ target_field_type: 'text',
204
+ },
205
+ },
206
+ },
207
+ ],
208
+ })
209
+ assert.equal(parsed.success, false)
210
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'fields.1.options.relation.local_linkto_field_id'))
211
+ })
212
+
213
+ test('EntitySaveReqVO rejects formula references to unknown field ids', () => {
214
+ assert.ok(schema)
215
+ const parsed = schema!.safeParse({
216
+ field_id_seq: 1003,
217
+ layout: [[1001]],
218
+ fields: [
219
+ buildMinimalField(1001),
220
+ {
221
+ ...buildMinimalField(1002),
222
+ key: 'calc',
223
+ label: '计算值',
224
+ type: 'formula',
225
+ options: {
226
+ formula: {
227
+ code: '[[订单号:9999]]',
228
+ jsonlogic: { var: '9999' },
229
+ },
230
+ },
231
+ },
232
+ ],
233
+ })
234
+ assert.equal(parsed.success, false)
235
+ assert.ok(parsed.error.issues.some((issue) => issue.message.includes('unknown field id 9999')))
236
+ })