@carthooks/arcubase-cli 0.1.13 → 0.1.16
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/bundle/arcubase-admin.mjs +14934 -3808
- package/bundle/arcubase.mjs +14934 -3808
- package/dist/generated/command_registry.generated.d.ts +108 -0
- package/dist/generated/command_registry.generated.d.ts.map +1 -1
- package/dist/generated/command_registry.generated.js +145 -0
- package/dist/generated/zod_registry.generated.d.ts +23 -23
- package/dist/runtime/entity_import_mapping.d.ts +12 -0
- package/dist/runtime/entity_import_mapping.d.ts.map +1 -0
- package/dist/runtime/entity_import_mapping.js +133 -0
- package/dist/runtime/entity_save_schema.d.ts.map +1 -1
- package/dist/runtime/entity_save_schema.js +23 -2
- package/dist/runtime/execute.d.ts.map +1 -1
- package/dist/runtime/execute.js +309 -5
- package/dist/runtime/local_upload.d.ts +10 -0
- package/dist/runtime/local_upload.d.ts.map +1 -0
- package/dist/runtime/local_upload.js +73 -0
- package/dist/tests/entity_save_schema.test.js +38 -0
- package/dist/tests/execute_validation.test.js +2 -2
- package/package.json +7 -7
- package/sdk-dist/docs/runtime-reference/README.md +6 -0
- package/sdk-dist/docs/runtime-reference/entity-schema/textarea.md +2 -2
- package/sdk-dist/docs/runtime-reference/examples/crm-01/lead.query.json +1 -1
- package/sdk-dist/docs/runtime-reference/examples/oms-01/sales-order.query.json +1 -1
- package/sdk-dist/docs/runtime-reference/examples/wms-01/inventory-snapshot.query.json +1 -1
- package/sdk-dist/docs/runtime-reference/row-crud.md +55 -0
- package/sdk-dist/docs/runtime-reference/search-and-bulk-actions.md +26 -1
- package/sdk-dist/docs/runtime-reference/table-lifecycle.md +1 -1
- package/sdk-dist/generated/command_registry.generated.ts +145 -0
- package/sdk-dist/types/common.ts +1 -0
- package/src/generated/command_registry.generated.ts +145 -0
- package/src/runtime/entity_import_mapping.ts +172 -0
- package/src/runtime/entity_save_schema.ts +27 -3
- package/src/runtime/execute.ts +324 -6
- package/src/runtime/local_upload.ts +84 -0
- package/src/tests/command_registry.test.ts +4 -0
- package/src/tests/entity_import_mapping.test.ts +87 -0
- package/src/tests/entity_save_schema.test.ts +40 -0
- package/src/tests/execute_validation.test.ts +231 -5
- package/src/tests/help.test.ts +14 -0
- package/src/tests/local_upload.test.ts +47 -0
- package/src/tests/zod_registry.test.ts +27 -0
|
@@ -60,6 +60,48 @@ export declare const adminCommands: readonly [{
|
|
|
60
60
|
readonly requestType: "AppCreateByTenantsReqVO";
|
|
61
61
|
readonly queryParams: readonly [];
|
|
62
62
|
readonly responseType: "AppCreateByTenantsRespVO";
|
|
63
|
+
}, {
|
|
64
|
+
readonly scope: "admin";
|
|
65
|
+
readonly module: "app";
|
|
66
|
+
readonly functionName: "createAppFromBundleURL";
|
|
67
|
+
readonly commandPath: readonly ["app", "create-from-bundle-url"];
|
|
68
|
+
readonly method: "POST";
|
|
69
|
+
readonly endpoint: "/api/apps/import-task";
|
|
70
|
+
readonly pathParams: readonly [];
|
|
71
|
+
readonly controller: "manual";
|
|
72
|
+
readonly requestType: null;
|
|
73
|
+
readonly queryParams: readonly [{
|
|
74
|
+
readonly key: "url";
|
|
75
|
+
readonly flag: "url";
|
|
76
|
+
readonly type: "string";
|
|
77
|
+
readonly hasDefault: false;
|
|
78
|
+
}, {
|
|
79
|
+
readonly key: "name";
|
|
80
|
+
readonly flag: "name";
|
|
81
|
+
readonly type: "string";
|
|
82
|
+
readonly hasDefault: true;
|
|
83
|
+
}];
|
|
84
|
+
readonly responseType: "AppBundleImportTaskCreateRespVO";
|
|
85
|
+
}, {
|
|
86
|
+
readonly scope: "admin";
|
|
87
|
+
readonly module: "app";
|
|
88
|
+
readonly functionName: "watchAppBundleImportTask";
|
|
89
|
+
readonly commandPath: readonly ["app", "watch-import-task"];
|
|
90
|
+
readonly method: "GET";
|
|
91
|
+
readonly endpoint: "/api/apps/import-task/:task_id";
|
|
92
|
+
readonly pathParams: readonly [{
|
|
93
|
+
readonly param: "task_id";
|
|
94
|
+
readonly flag: "task-id";
|
|
95
|
+
}];
|
|
96
|
+
readonly controller: "manual";
|
|
97
|
+
readonly requestType: null;
|
|
98
|
+
readonly queryParams: readonly [{
|
|
99
|
+
readonly key: "ttl_seconds";
|
|
100
|
+
readonly flag: "ttl-seconds";
|
|
101
|
+
readonly type: "number";
|
|
102
|
+
readonly hasDefault: false;
|
|
103
|
+
}];
|
|
104
|
+
readonly responseType: "AppBundleImportTaskStatusRespVO";
|
|
63
105
|
}, {
|
|
64
106
|
readonly scope: "admin";
|
|
65
107
|
readonly module: "app";
|
|
@@ -581,6 +623,72 @@ export declare const userCommands: readonly [{
|
|
|
581
623
|
readonly requestType: "EntityBulkUpdateReqVO";
|
|
582
624
|
readonly queryParams: readonly [];
|
|
583
625
|
readonly responseType: "EntityBulkUpdateRespVO";
|
|
626
|
+
}, {
|
|
627
|
+
readonly scope: "user";
|
|
628
|
+
readonly module: "row";
|
|
629
|
+
readonly functionName: "importEntityRecordsFromExcel";
|
|
630
|
+
readonly commandPath: readonly ["row", "import-excel"];
|
|
631
|
+
readonly method: "POST";
|
|
632
|
+
readonly endpoint: "/api/entity/:app_id/:entity_id/import";
|
|
633
|
+
readonly pathParams: readonly [{
|
|
634
|
+
readonly param: "app_id";
|
|
635
|
+
readonly flag: "app-id";
|
|
636
|
+
}, {
|
|
637
|
+
readonly param: "entity_id";
|
|
638
|
+
readonly flag: "table-id";
|
|
639
|
+
}];
|
|
640
|
+
readonly controller: "manual";
|
|
641
|
+
readonly requestType: null;
|
|
642
|
+
readonly queryParams: readonly [{
|
|
643
|
+
readonly key: "file";
|
|
644
|
+
readonly flag: "file";
|
|
645
|
+
readonly type: "string";
|
|
646
|
+
readonly hasDefault: false;
|
|
647
|
+
}, {
|
|
648
|
+
readonly key: "mapping_file";
|
|
649
|
+
readonly flag: "mapping-file";
|
|
650
|
+
readonly type: "string";
|
|
651
|
+
readonly hasDefault: false;
|
|
652
|
+
}, {
|
|
653
|
+
readonly key: "ttl_seconds";
|
|
654
|
+
readonly flag: "ttl-seconds";
|
|
655
|
+
readonly type: "number";
|
|
656
|
+
readonly hasDefault: true;
|
|
657
|
+
}];
|
|
658
|
+
readonly responseType: "ImporterGetStateRespVO";
|
|
659
|
+
}, {
|
|
660
|
+
readonly scope: "user";
|
|
661
|
+
readonly module: "row";
|
|
662
|
+
readonly functionName: "importEntityRecordsFromCSV";
|
|
663
|
+
readonly commandPath: readonly ["row", "import-csv"];
|
|
664
|
+
readonly method: "POST";
|
|
665
|
+
readonly endpoint: "/api/entity/:app_id/:entity_id/import";
|
|
666
|
+
readonly pathParams: readonly [{
|
|
667
|
+
readonly param: "app_id";
|
|
668
|
+
readonly flag: "app-id";
|
|
669
|
+
}, {
|
|
670
|
+
readonly param: "entity_id";
|
|
671
|
+
readonly flag: "table-id";
|
|
672
|
+
}];
|
|
673
|
+
readonly controller: "manual";
|
|
674
|
+
readonly requestType: null;
|
|
675
|
+
readonly queryParams: readonly [{
|
|
676
|
+
readonly key: "file";
|
|
677
|
+
readonly flag: "file";
|
|
678
|
+
readonly type: "string";
|
|
679
|
+
readonly hasDefault: false;
|
|
680
|
+
}, {
|
|
681
|
+
readonly key: "mapping_file";
|
|
682
|
+
readonly flag: "mapping-file";
|
|
683
|
+
readonly type: "string";
|
|
684
|
+
readonly hasDefault: false;
|
|
685
|
+
}, {
|
|
686
|
+
readonly key: "ttl_seconds";
|
|
687
|
+
readonly flag: "ttl-seconds";
|
|
688
|
+
readonly type: "number";
|
|
689
|
+
readonly hasDefault: true;
|
|
690
|
+
}];
|
|
691
|
+
readonly responseType: "ImporterGetStateRespVO";
|
|
584
692
|
}, {
|
|
585
693
|
readonly scope: "user";
|
|
586
694
|
readonly module: "row";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command_registry.generated.d.ts","sourceRoot":"","sources":["../../src/generated/command_registry.generated.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3E,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,SAAS;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7G,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"command_registry.generated.d.ts","sourceRoot":"","sources":["../../src/generated/command_registry.generated.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,SAAS;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC3E,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,WAAW,EAAE,SAAS;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,OAAO,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7G,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwjBhB,CAAA;AAEV,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+uBf,CAAA"}
|
|
@@ -53,6 +53,63 @@ export const adminCommands = [
|
|
|
53
53
|
"queryParams": [],
|
|
54
54
|
"responseType": "AppCreateByTenantsRespVO"
|
|
55
55
|
},
|
|
56
|
+
{
|
|
57
|
+
"scope": "admin",
|
|
58
|
+
"module": "app",
|
|
59
|
+
"functionName": "createAppFromBundleURL",
|
|
60
|
+
"commandPath": [
|
|
61
|
+
"app",
|
|
62
|
+
"create-from-bundle-url"
|
|
63
|
+
],
|
|
64
|
+
"method": "POST",
|
|
65
|
+
"endpoint": "/api/apps/import-task",
|
|
66
|
+
"pathParams": [],
|
|
67
|
+
"controller": "manual",
|
|
68
|
+
"requestType": null,
|
|
69
|
+
"queryParams": [
|
|
70
|
+
{
|
|
71
|
+
"key": "url",
|
|
72
|
+
"flag": "url",
|
|
73
|
+
"type": "string",
|
|
74
|
+
"hasDefault": false
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"key": "name",
|
|
78
|
+
"flag": "name",
|
|
79
|
+
"type": "string",
|
|
80
|
+
"hasDefault": true
|
|
81
|
+
}
|
|
82
|
+
],
|
|
83
|
+
"responseType": "AppBundleImportTaskCreateRespVO"
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"scope": "admin",
|
|
87
|
+
"module": "app",
|
|
88
|
+
"functionName": "watchAppBundleImportTask",
|
|
89
|
+
"commandPath": [
|
|
90
|
+
"app",
|
|
91
|
+
"watch-import-task"
|
|
92
|
+
],
|
|
93
|
+
"method": "GET",
|
|
94
|
+
"endpoint": "/api/apps/import-task/:task_id",
|
|
95
|
+
"pathParams": [
|
|
96
|
+
{
|
|
97
|
+
"param": "task_id",
|
|
98
|
+
"flag": "task-id"
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"controller": "manual",
|
|
102
|
+
"requestType": null,
|
|
103
|
+
"queryParams": [
|
|
104
|
+
{
|
|
105
|
+
"key": "ttl_seconds",
|
|
106
|
+
"flag": "ttl-seconds",
|
|
107
|
+
"type": "number",
|
|
108
|
+
"hasDefault": false
|
|
109
|
+
}
|
|
110
|
+
],
|
|
111
|
+
"responseType": "AppBundleImportTaskStatusRespVO"
|
|
112
|
+
},
|
|
56
113
|
{
|
|
57
114
|
"scope": "admin",
|
|
58
115
|
"module": "app",
|
|
@@ -775,6 +832,94 @@ export const userCommands = [
|
|
|
775
832
|
"queryParams": [],
|
|
776
833
|
"responseType": "EntityBulkUpdateRespVO"
|
|
777
834
|
},
|
|
835
|
+
{
|
|
836
|
+
"scope": "user",
|
|
837
|
+
"module": "row",
|
|
838
|
+
"functionName": "importEntityRecordsFromExcel",
|
|
839
|
+
"commandPath": [
|
|
840
|
+
"row",
|
|
841
|
+
"import-excel"
|
|
842
|
+
],
|
|
843
|
+
"method": "POST",
|
|
844
|
+
"endpoint": "/api/entity/:app_id/:entity_id/import",
|
|
845
|
+
"pathParams": [
|
|
846
|
+
{
|
|
847
|
+
"param": "app_id",
|
|
848
|
+
"flag": "app-id"
|
|
849
|
+
},
|
|
850
|
+
{
|
|
851
|
+
"param": "entity_id",
|
|
852
|
+
"flag": "table-id"
|
|
853
|
+
}
|
|
854
|
+
],
|
|
855
|
+
"controller": "manual",
|
|
856
|
+
"requestType": null,
|
|
857
|
+
"queryParams": [
|
|
858
|
+
{
|
|
859
|
+
"key": "file",
|
|
860
|
+
"flag": "file",
|
|
861
|
+
"type": "string",
|
|
862
|
+
"hasDefault": false
|
|
863
|
+
},
|
|
864
|
+
{
|
|
865
|
+
"key": "mapping_file",
|
|
866
|
+
"flag": "mapping-file",
|
|
867
|
+
"type": "string",
|
|
868
|
+
"hasDefault": false
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
"key": "ttl_seconds",
|
|
872
|
+
"flag": "ttl-seconds",
|
|
873
|
+
"type": "number",
|
|
874
|
+
"hasDefault": true
|
|
875
|
+
}
|
|
876
|
+
],
|
|
877
|
+
"responseType": "ImporterGetStateRespVO"
|
|
878
|
+
},
|
|
879
|
+
{
|
|
880
|
+
"scope": "user",
|
|
881
|
+
"module": "row",
|
|
882
|
+
"functionName": "importEntityRecordsFromCSV",
|
|
883
|
+
"commandPath": [
|
|
884
|
+
"row",
|
|
885
|
+
"import-csv"
|
|
886
|
+
],
|
|
887
|
+
"method": "POST",
|
|
888
|
+
"endpoint": "/api/entity/:app_id/:entity_id/import",
|
|
889
|
+
"pathParams": [
|
|
890
|
+
{
|
|
891
|
+
"param": "app_id",
|
|
892
|
+
"flag": "app-id"
|
|
893
|
+
},
|
|
894
|
+
{
|
|
895
|
+
"param": "entity_id",
|
|
896
|
+
"flag": "table-id"
|
|
897
|
+
}
|
|
898
|
+
],
|
|
899
|
+
"controller": "manual",
|
|
900
|
+
"requestType": null,
|
|
901
|
+
"queryParams": [
|
|
902
|
+
{
|
|
903
|
+
"key": "file",
|
|
904
|
+
"flag": "file",
|
|
905
|
+
"type": "string",
|
|
906
|
+
"hasDefault": false
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
"key": "mapping_file",
|
|
910
|
+
"flag": "mapping-file",
|
|
911
|
+
"type": "string",
|
|
912
|
+
"hasDefault": false
|
|
913
|
+
},
|
|
914
|
+
{
|
|
915
|
+
"key": "ttl_seconds",
|
|
916
|
+
"flag": "ttl-seconds",
|
|
917
|
+
"type": "number",
|
|
918
|
+
"hasDefault": true
|
|
919
|
+
}
|
|
920
|
+
],
|
|
921
|
+
"responseType": "ImporterGetStateRespVO"
|
|
922
|
+
},
|
|
778
923
|
{
|
|
779
924
|
"scope": "user",
|
|
780
925
|
"module": "row",
|
|
@@ -81,29 +81,29 @@ export declare const TenantUserSchema: z.ZodTypeAny;
|
|
|
81
81
|
export declare const UserProfileUpdateReqVOSchema: z.ZodTypeAny;
|
|
82
82
|
export declare const generatedRequestTypes: readonly ["AppCreateByTenantsReqVO", "AppCreateEntityReqVO", "AppIngressCreateReqVO", "AppIngressUpdateReqVO", "AppUpdateAppReqVO", "EntityBulkUpdateReqVO", "EntityDoActionReqVO", "EntityQueryRelationReqVO", "EntityQueryReqVO", "EntityResolveWorkflowReqVO", "EntitySaveNameReqVO", "EntitySaveReqVO", "EntitySelectionActionReqVO", "EntityUpdateReqVO", "EntityWorkflowApproveUsersReqVO", "EntityWorkflowDeployReqVO", "EntityWorkflowUpdateReqVO", "GetUploadTokenReqVO", "InsertReqVO", "MobileUploadCheckReqVO", "MobileUploadReqVO", "UploadPreviewReqVO", "UserProfileUpdateReqVO"];
|
|
83
83
|
export declare const bodySchemas: {
|
|
84
|
-
readonly AppCreateByTenantsReqVO: z.
|
|
85
|
-
readonly AppCreateEntityReqVO: z.
|
|
86
|
-
readonly AppIngressCreateReqVO: z.
|
|
87
|
-
readonly AppIngressUpdateReqVO: z.
|
|
88
|
-
readonly AppUpdateAppReqVO: z.
|
|
89
|
-
readonly EntityBulkUpdateReqVO: z.
|
|
90
|
-
readonly EntityDoActionReqVO: z.
|
|
91
|
-
readonly EntityQueryRelationReqVO: z.
|
|
92
|
-
readonly EntityQueryReqVO: z.
|
|
93
|
-
readonly EntityResolveWorkflowReqVO: z.
|
|
94
|
-
readonly EntitySaveNameReqVO: z.
|
|
95
|
-
readonly EntitySaveReqVO: z.
|
|
96
|
-
readonly EntitySelectionActionReqVO: z.
|
|
97
|
-
readonly EntityUpdateReqVO: z.
|
|
98
|
-
readonly EntityWorkflowApproveUsersReqVO: z.
|
|
99
|
-
readonly EntityWorkflowDeployReqVO: z.
|
|
100
|
-
readonly EntityWorkflowUpdateReqVO: z.
|
|
101
|
-
readonly GetUploadTokenReqVO: z.
|
|
102
|
-
readonly InsertReqVO: z.
|
|
103
|
-
readonly MobileUploadCheckReqVO: z.
|
|
104
|
-
readonly MobileUploadReqVO: z.
|
|
105
|
-
readonly UploadPreviewReqVO: z.
|
|
106
|
-
readonly UserProfileUpdateReqVO: z.
|
|
84
|
+
readonly AppCreateByTenantsReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
85
|
+
readonly AppCreateEntityReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
86
|
+
readonly AppIngressCreateReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
87
|
+
readonly AppIngressUpdateReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
88
|
+
readonly AppUpdateAppReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
89
|
+
readonly EntityBulkUpdateReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
90
|
+
readonly EntityDoActionReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
91
|
+
readonly EntityQueryRelationReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
92
|
+
readonly EntityQueryReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
93
|
+
readonly EntityResolveWorkflowReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
94
|
+
readonly EntitySaveNameReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
95
|
+
readonly EntitySaveReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
96
|
+
readonly EntitySelectionActionReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
97
|
+
readonly EntityUpdateReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
98
|
+
readonly EntityWorkflowApproveUsersReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
99
|
+
readonly EntityWorkflowDeployReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
100
|
+
readonly EntityWorkflowUpdateReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
101
|
+
readonly GetUploadTokenReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
102
|
+
readonly InsertReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
103
|
+
readonly MobileUploadCheckReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
104
|
+
readonly MobileUploadReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
105
|
+
readonly UploadPreviewReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
106
|
+
readonly UserProfileUpdateReqVO: z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>;
|
|
107
107
|
};
|
|
108
108
|
export declare const unsupportedBodySchemas: {};
|
|
109
109
|
export type GeneratedBodySchemaName = keyof typeof bodySchemas;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export type ImportMode = 'addonly' | 'updateonly' | 'addorupdate';
|
|
2
|
+
export type CompiledEntityImportConfig = {
|
|
3
|
+
fileFormat: 'excel' | 'csv';
|
|
4
|
+
importMode: ImportMode;
|
|
5
|
+
workingSheet?: string;
|
|
6
|
+
titleRowIndex: number;
|
|
7
|
+
csvDelimiter?: string;
|
|
8
|
+
mapper: Record<string, number>;
|
|
9
|
+
};
|
|
10
|
+
export declare function compileExcelImportMapping(input: unknown): CompiledEntityImportConfig;
|
|
11
|
+
export declare function compileCSVImportMapping(input: unknown, headers: string[]): CompiledEntityImportConfig;
|
|
12
|
+
//# sourceMappingURL=entity_import_mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity_import_mapping.d.ts","sourceRoot":"","sources":["../../src/runtime/entity_import_mapping.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,YAAY,GAAG,aAAa,CAAA;AAEjE,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,OAAO,GAAG,KAAK,CAAA;IAC3B,UAAU,EAAE,UAAU,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B,CAAA;AA+ED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,0BAA0B,CA6BpF;AAuBD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,0BAA0B,CA6BrG"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { CLIError } from './errors.js';
|
|
2
|
+
function fail(message, details = {}) {
|
|
3
|
+
throw new CLIError('INVALID_IMPORT_MAPPING', message, 2, {
|
|
4
|
+
hint: 'run command help for a complete mapping example',
|
|
5
|
+
...details,
|
|
6
|
+
});
|
|
7
|
+
}
|
|
8
|
+
function parseMode(value) {
|
|
9
|
+
if (value === 'addonly' || value === 'updateonly' || value === 'addorupdate')
|
|
10
|
+
return value;
|
|
11
|
+
fail('mode must be one of addonly, updateonly, addorupdate');
|
|
12
|
+
}
|
|
13
|
+
function parseDataStartRow(value) {
|
|
14
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value < 2) {
|
|
15
|
+
fail('dataStartRow must be an integer greater than or equal to 2');
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
function titleRowIndexFromDataStartRow(value) {
|
|
20
|
+
return value - 2;
|
|
21
|
+
}
|
|
22
|
+
function parseFieldId(value, path) {
|
|
23
|
+
if (typeof value !== 'number' || !Number.isInteger(value) || value <= 0) {
|
|
24
|
+
fail(`${path}.fieldId must be a number`, {
|
|
25
|
+
commonMistakes: ['fieldId must be numeric, not a quoted string', 'use arcubase-admin table get to inspect field ids'],
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return value;
|
|
29
|
+
}
|
|
30
|
+
function excelColumnToIndex(column, path) {
|
|
31
|
+
if (typeof column !== 'string' || !/^[A-Za-z]+$/.test(column.trim())) {
|
|
32
|
+
fail(`${path} must be an Excel column such as A, B, or AA`);
|
|
33
|
+
}
|
|
34
|
+
let value = 0;
|
|
35
|
+
for (const char of column.trim().toUpperCase()) {
|
|
36
|
+
value = value * 26 + (char.charCodeAt(0) - 64);
|
|
37
|
+
}
|
|
38
|
+
return value - 1;
|
|
39
|
+
}
|
|
40
|
+
function assertUniqueTarget(mapper, key, index) {
|
|
41
|
+
if (key in mapper) {
|
|
42
|
+
fail(`duplicate field mapping for ${key}`);
|
|
43
|
+
}
|
|
44
|
+
if (Object.values(mapper).includes(index)) {
|
|
45
|
+
fail(`duplicate source column index ${index}`);
|
|
46
|
+
}
|
|
47
|
+
mapper[key] = index;
|
|
48
|
+
}
|
|
49
|
+
function validateRecordId(mode, recordId) {
|
|
50
|
+
if ((mode === 'updateonly' || mode === 'addorupdate') && !recordId) {
|
|
51
|
+
fail('recordId is required for updateonly and addorupdate');
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export function compileExcelImportMapping(input) {
|
|
55
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
56
|
+
fail('excel mapping must be a JSON object');
|
|
57
|
+
}
|
|
58
|
+
const mapping = input;
|
|
59
|
+
const mode = parseMode(mapping.mode);
|
|
60
|
+
validateRecordId(mode, mapping.recordId);
|
|
61
|
+
if (typeof mapping.sheet !== 'string' || mapping.sheet.trim() === '') {
|
|
62
|
+
fail('sheet is required for excel import');
|
|
63
|
+
}
|
|
64
|
+
if (!Array.isArray(mapping.fields) || mapping.fields.length === 0) {
|
|
65
|
+
fail('fields must be a non-empty array');
|
|
66
|
+
}
|
|
67
|
+
const mapper = {};
|
|
68
|
+
if (mapping.recordId?.column !== undefined) {
|
|
69
|
+
assertUniqueTarget(mapper, '$id', excelColumnToIndex(mapping.recordId.column, 'recordId.column'));
|
|
70
|
+
}
|
|
71
|
+
mapping.fields.forEach((field, index) => {
|
|
72
|
+
const fieldId = parseFieldId(field.fieldId, `fields.${index}`);
|
|
73
|
+
const columnIndex = excelColumnToIndex(field.column, `fields.${index}.column`);
|
|
74
|
+
assertUniqueTarget(mapper, String(fieldId), columnIndex);
|
|
75
|
+
});
|
|
76
|
+
return {
|
|
77
|
+
fileFormat: 'excel',
|
|
78
|
+
importMode: mode,
|
|
79
|
+
workingSheet: mapping.sheet.trim(),
|
|
80
|
+
titleRowIndex: titleRowIndexFromDataStartRow(parseDataStartRow(mapping.dataStartRow)),
|
|
81
|
+
mapper,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function parseDelimiter(value) {
|
|
85
|
+
if (value === undefined || value === null || value === '')
|
|
86
|
+
return ',';
|
|
87
|
+
if (typeof value !== 'string' || [...value].length !== 1) {
|
|
88
|
+
fail('delimiter must be exactly one character');
|
|
89
|
+
}
|
|
90
|
+
return value;
|
|
91
|
+
}
|
|
92
|
+
function headerIndex(headers, wanted, path) {
|
|
93
|
+
if (typeof wanted !== 'string' || wanted.trim() === '') {
|
|
94
|
+
fail(`${path} is required`);
|
|
95
|
+
}
|
|
96
|
+
const index = headers.indexOf(wanted);
|
|
97
|
+
if (index < 0) {
|
|
98
|
+
fail(`CSV header not found: ${wanted}`, {
|
|
99
|
+
suggestions: [`available headers: ${headers.join(', ')}`],
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return index;
|
|
103
|
+
}
|
|
104
|
+
export function compileCSVImportMapping(input, headers) {
|
|
105
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) {
|
|
106
|
+
fail('csv mapping must be a JSON object');
|
|
107
|
+
}
|
|
108
|
+
const mapping = input;
|
|
109
|
+
const mode = parseMode(mapping.mode);
|
|
110
|
+
validateRecordId(mode, mapping.recordId);
|
|
111
|
+
if (mapping.header !== true) {
|
|
112
|
+
fail('csv mapping header must be true');
|
|
113
|
+
}
|
|
114
|
+
if (!Array.isArray(mapping.fields) || mapping.fields.length === 0) {
|
|
115
|
+
fail('fields must be a non-empty array');
|
|
116
|
+
}
|
|
117
|
+
const mapper = {};
|
|
118
|
+
if (mapping.recordId?.header !== undefined) {
|
|
119
|
+
assertUniqueTarget(mapper, '$id', headerIndex(headers, mapping.recordId.header, 'recordId.header'));
|
|
120
|
+
}
|
|
121
|
+
mapping.fields.forEach((field, index) => {
|
|
122
|
+
const fieldId = parseFieldId(field.fieldId, `fields.${index}`);
|
|
123
|
+
const columnIndex = headerIndex(headers, field.header, `fields.${index}.header`);
|
|
124
|
+
assertUniqueTarget(mapper, String(fieldId), columnIndex);
|
|
125
|
+
});
|
|
126
|
+
return {
|
|
127
|
+
fileFormat: 'csv',
|
|
128
|
+
importMode: mode,
|
|
129
|
+
titleRowIndex: titleRowIndexFromDataStartRow(parseDataStartRow(mapping.dataStartRow)),
|
|
130
|
+
csvDelimiter: parseDelimiter(mapping.delimiter),
|
|
131
|
+
mapper,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity_save_schema.d.ts","sourceRoot":"","sources":["../../src/runtime/entity_save_schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"entity_save_schema.d.ts","sourceRoot":"","sources":["../../src/runtime/entity_save_schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AA2TvB,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,UAA6C,CAAA;AAE7E,eAAO,MAAM,kBAAkB,EAAE,CAAC,CAAC,UAQlC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,CAAC,CAAC,UAK7B,CAAA;AAuKD,eAAO,MAAM,6BAA6B,EAAE,CAAC,CAAC,UAA8E,CAAA;AAmB5H,eAAO,MAAM,qCAAqC,EAAE,CAAC,CAAC,UAI3C,CAAA;AAEX,eAAO,MAAM,8BAA8B,EAAE,CAAC,CAAC,UASpC,CAAA;AAEX,eAAO,MAAM,yBAAyB,EAAE,CAAC,CAAC,UAaxC,CAAA;AAEF,eAAO,MAAM,+BAA+B,EAAE,CAAC,CAAC,UA4B9C,CAAA;AA4EF,eAAO,MAAM,wCAAwC,EAAE,CAAC,CAAC,UAOxD,CAAA;AAwED,eAAO,MAAM,mCAAmC,EAAE,CAAC,CAAC,UAOzC,CAAA;AAEX,eAAO,MAAM,sCAAsC,EAAE,CAAC,CAAC,UAG5C,CAAA;AAEX,eAAO,MAAM,kCAAkC,EAAE,CAAC,CAAC,UAIxC,CAAA;AAEX,eAAO,MAAM,4CAA4C,EAAE,CAAC,CAAC,UAQlD,CAAA"}
|
|
@@ -177,6 +177,14 @@ function makeSimpleFieldSchema(type) {
|
|
|
177
177
|
children: z.null(),
|
|
178
178
|
}).strict();
|
|
179
179
|
}
|
|
180
|
+
const textareaFieldSchema = z.object({
|
|
181
|
+
...fieldCommonShape,
|
|
182
|
+
type: z.literal('textarea'),
|
|
183
|
+
options: z.object({
|
|
184
|
+
size: z.number().int().min(1),
|
|
185
|
+
}).passthrough(),
|
|
186
|
+
children: z.null(),
|
|
187
|
+
}).strict();
|
|
180
188
|
function makeEnumFieldSchema(type) {
|
|
181
189
|
const itemSchema = type === 'status' ? statusItemSchema : enumItemSchema;
|
|
182
190
|
return z.object({
|
|
@@ -190,7 +198,9 @@ function makeEnumFieldSchema(type) {
|
|
|
190
198
|
children: z.null(),
|
|
191
199
|
}).strict();
|
|
192
200
|
}
|
|
193
|
-
const simpleFieldSchemas = simpleFieldTypes
|
|
201
|
+
const simpleFieldSchemas = simpleFieldTypes
|
|
202
|
+
.filter((type) => type !== 'textarea')
|
|
203
|
+
.map((type) => makeSimpleFieldSchema(type));
|
|
194
204
|
const enumFieldSchemas = enumFieldTypes.map((type) => makeEnumFieldSchema(type));
|
|
195
205
|
const formulaFieldSchema = z.object({
|
|
196
206
|
...fieldCommonShape,
|
|
@@ -259,6 +269,7 @@ const genericFieldSchema = z.object({
|
|
|
259
269
|
children: z.null(),
|
|
260
270
|
}).strict();
|
|
261
271
|
const baseFieldSchemaVariants = [
|
|
272
|
+
textareaFieldSchema,
|
|
262
273
|
...simpleFieldSchemas,
|
|
263
274
|
...enumFieldSchemas,
|
|
264
275
|
...relationFieldSchemas,
|
|
@@ -442,6 +453,16 @@ const queryOrderSchema = z.object({
|
|
|
442
453
|
column: z.string().min(1),
|
|
443
454
|
order: z.string().min(1),
|
|
444
455
|
}).strict();
|
|
456
|
+
const routeQuerySearchKeySchema = z.string().superRefine((key, ctx) => {
|
|
457
|
+
if (key === 'q' || key === 'tab' || /^filter_:\d+$/.test(key)) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
ctx.addIssue({
|
|
461
|
+
code: z.ZodIssueCode.custom,
|
|
462
|
+
message: 'row query search only accepts route-query string keys: q, tab, and filter_:<field_id>',
|
|
463
|
+
});
|
|
464
|
+
});
|
|
465
|
+
const routeQuerySearchSchema = z.record(routeQuerySearchKeySchema, z.string().min(1));
|
|
445
466
|
export const AppCreateByTenantsReqVOSchemaOverride = z.object({
|
|
446
467
|
icon_color: z.string().optional(),
|
|
447
468
|
icon_name: z.string().optional(),
|
|
@@ -451,7 +472,7 @@ export const EntityQueryReqVOSchemaOverride = z.object({
|
|
|
451
472
|
limit: z.number().int().positive().optional(),
|
|
452
473
|
offset: z.number().int().min(0).optional(),
|
|
453
474
|
policy_id: z.string().optional(),
|
|
454
|
-
search:
|
|
475
|
+
search: routeQuerySearchSchema.optional(),
|
|
455
476
|
sorts: z.array(queryOrderSchema).optional(),
|
|
456
477
|
view_mode: z.string().optional(),
|
|
457
478
|
viewMode: z.never().optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/runtime/execute.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/runtime/execute.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,UAAU,CAAA;AAG1D,OAAO,EAAyF,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAOhJ,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,YAAY,CAAA;IACnB,WAAW,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;IAC5B,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9B,CAAA;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAc1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,QAAsB,GAAG,MAAM,CAoB7G;AAOD,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;AAMlD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,QAAsB,GAAG,MAAM,CA6HpI;AAowDD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,uBAAuB,CActH;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,GAAE,OAAO,KAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CA6MrI"}
|