@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,221 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { getBodySchema } from '../runtime/zod_registry.js';
4
+ const schema = getBodySchema('EntitySaveReqVO');
5
+ function buildMinimalField(id = 1001) {
6
+ return {
7
+ id,
8
+ label: '订单号',
9
+ type: 'text',
10
+ required: true,
11
+ unique: false,
12
+ editable: true,
13
+ visible: true,
14
+ show_label: true,
15
+ scannable: false,
16
+ default_value_mode: 0,
17
+ description: '',
18
+ value: null,
19
+ number_decimal: 0,
20
+ depends: [],
21
+ key: 'order_id',
22
+ code_index: false,
23
+ options: {},
24
+ transfers: null,
25
+ children: null,
26
+ };
27
+ }
28
+ test('EntitySaveReqVO accepts fields as array', () => {
29
+ assert.ok(schema);
30
+ const parsed = schema.safeParse({
31
+ id: 2188889845,
32
+ app_id: 2188889844,
33
+ name: '订单',
34
+ schema_version: 1,
35
+ field_id_seq: 1002,
36
+ layout: [[1001]],
37
+ fields: [buildMinimalField()],
38
+ workflow_enabled: false,
39
+ });
40
+ assert.equal(parsed.success, true);
41
+ });
42
+ test('EntitySaveReqVO rejects fields as object', () => {
43
+ assert.ok(schema);
44
+ const parsed = schema.safeParse({
45
+ name: '订单',
46
+ fields: {
47
+ order_id: {
48
+ id: 1001,
49
+ label: '订单号',
50
+ },
51
+ },
52
+ });
53
+ assert.equal(parsed.success, false);
54
+ });
55
+ test('EntitySaveReqVO rejects field_id_seq not greater than max field id', () => {
56
+ assert.ok(schema);
57
+ const parsed = schema.safeParse({
58
+ field_id_seq: 1001,
59
+ layout: [[1001]],
60
+ fields: [buildMinimalField(1001)],
61
+ });
62
+ assert.equal(parsed.success, false);
63
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'field_id_seq'));
64
+ });
65
+ test('EntitySaveReqVO rejects layout unknown top-level field id', () => {
66
+ assert.ok(schema);
67
+ const parsed = schema.safeParse({
68
+ field_id_seq: 1002,
69
+ layout: [[9999]],
70
+ fields: [buildMinimalField(1001)],
71
+ });
72
+ assert.equal(parsed.success, false);
73
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'layout.0.0'));
74
+ });
75
+ test('EntitySaveReqVO rejects non-subform field children', () => {
76
+ assert.ok(schema);
77
+ const parsed = schema.safeParse({
78
+ field_id_seq: 1003,
79
+ layout: [[1001]],
80
+ fields: [{
81
+ ...buildMinimalField(1001),
82
+ children: [buildMinimalField(1002)],
83
+ }],
84
+ });
85
+ assert.equal(parsed.success, false);
86
+ });
87
+ test('EntitySaveReqVO requires status options items', () => {
88
+ assert.ok(schema);
89
+ const parsed = schema.safeParse({
90
+ field_id_seq: 1002,
91
+ layout: [[1001]],
92
+ fields: [{
93
+ ...buildMinimalField(1001),
94
+ type: 'status',
95
+ options: {},
96
+ }],
97
+ });
98
+ assert.equal(parsed.success, false);
99
+ });
100
+ test('EntitySaveReqVO requires serialnumber parts', () => {
101
+ assert.ok(schema);
102
+ const parsed = schema.safeParse({
103
+ field_id_seq: 1002,
104
+ layout: [[1001]],
105
+ fields: [{
106
+ ...buildMinimalField(1001),
107
+ type: 'serialnumber',
108
+ options: {},
109
+ }],
110
+ });
111
+ assert.equal(parsed.success, false);
112
+ });
113
+ test('EntitySaveReqVO requires lookup relation structure', () => {
114
+ assert.ok(schema);
115
+ const parsed = schema.safeParse({
116
+ field_id_seq: 1002,
117
+ layout: [[1001]],
118
+ fields: [{
119
+ ...buildMinimalField(1001),
120
+ type: 'lookup',
121
+ options: {},
122
+ }],
123
+ });
124
+ assert.equal(parsed.success, false);
125
+ });
126
+ test('EntitySaveReqVO requires relationfield relation app and entity ids', () => {
127
+ assert.ok(schema);
128
+ const parsed = schema.safeParse({
129
+ field_id_seq: 1002,
130
+ layout: [[1001]],
131
+ fields: [{
132
+ ...buildMinimalField(1001),
133
+ type: 'relationfield',
134
+ options: {
135
+ relation: {},
136
+ },
137
+ }],
138
+ });
139
+ assert.equal(parsed.success, false);
140
+ });
141
+ test('EntitySaveReqVO requires rollup relation and aggregation formula', () => {
142
+ assert.ok(schema);
143
+ const parsed = schema.safeParse({
144
+ field_id_seq: 1002,
145
+ layout: [[1001]],
146
+ fields: [{
147
+ ...buildMinimalField(1001),
148
+ type: 'rollup',
149
+ options: {
150
+ relation: {
151
+ local_linkto_field_id: 1009,
152
+ target_field_id: 1010,
153
+ target_field_type: 'number',
154
+ },
155
+ },
156
+ }],
157
+ });
158
+ assert.equal(parsed.success, false);
159
+ });
160
+ test('EntitySaveReqVO rejects subform layout that references non-child field id', () => {
161
+ assert.ok(schema);
162
+ const parsed = schema.safeParse({
163
+ field_id_seq: 1004,
164
+ layout: [[1001]],
165
+ fields: [{
166
+ ...buildMinimalField(1001),
167
+ type: 'subform',
168
+ children: [buildMinimalField(1002)],
169
+ layout: [[1003]],
170
+ }],
171
+ });
172
+ assert.equal(parsed.success, false);
173
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'fields.0.layout.0.0'));
174
+ });
175
+ test('EntitySaveReqVO rejects lookup local_linkto_field_id that does not point to linkto field', () => {
176
+ assert.ok(schema);
177
+ const parsed = schema.safeParse({
178
+ field_id_seq: 1004,
179
+ layout: [[1001], [1002]],
180
+ fields: [
181
+ buildMinimalField(1001),
182
+ {
183
+ ...buildMinimalField(1002),
184
+ type: 'lookup',
185
+ options: {
186
+ relation: {
187
+ local_linkto_field_id: 1001,
188
+ target_field_id: 2001,
189
+ target_field_type: 'text',
190
+ },
191
+ },
192
+ },
193
+ ],
194
+ });
195
+ assert.equal(parsed.success, false);
196
+ assert.ok(parsed.error.issues.some((issue) => issue.path.join('.') === 'fields.1.options.relation.local_linkto_field_id'));
197
+ });
198
+ test('EntitySaveReqVO rejects formula references to unknown field ids', () => {
199
+ assert.ok(schema);
200
+ const parsed = schema.safeParse({
201
+ field_id_seq: 1003,
202
+ layout: [[1001]],
203
+ fields: [
204
+ buildMinimalField(1001),
205
+ {
206
+ ...buildMinimalField(1002),
207
+ key: 'calc',
208
+ label: '计算值',
209
+ type: 'formula',
210
+ options: {
211
+ formula: {
212
+ code: '[[订单号:9999]]',
213
+ jsonlogic: { var: '9999' },
214
+ },
215
+ },
216
+ },
217
+ ],
218
+ });
219
+ assert.equal(parsed.success, false);
220
+ assert.ok(parsed.error.issues.some((issue) => issue.message.includes('unknown field id 9999')));
221
+ });