openxiangda 1.0.40 → 1.0.41

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/lib/cli.js CHANGED
@@ -2310,7 +2310,7 @@ async function permission(args) {
2310
2310
  const target = getWorkspaceTarget(config, profileName, flags);
2311
2311
  const formUuid = flags['form-uuid'] || resolveOptionalFormUuid(target.bound, flags['form-code']);
2312
2312
  if (!groupCode || !name || !formUuid) {
2313
- fail('用法: openxiangda permission form-group-create <groupCode> --form-code <formCode>|--form-uuid <FORM_XXX> --name <text> --type <submit|view>');
2313
+ fail('用法: openxiangda permission form-group-create <groupCode> --form-code <formCode>|--form-uuid <FORM_XXX> --name <text> --type <submit|view> [--field-access-policy-json <file|json>]');
2314
2314
  }
2315
2315
  const data = await requestWithAuth(
2316
2316
  config,
@@ -2334,6 +2334,14 @@ async function permission(args) {
2334
2334
  ),
2335
2335
  }
2336
2336
  : {}),
2337
+ ...(flags['field-access-policy-json']
2338
+ ? {
2339
+ fieldAccessPolicy: readJsonArg(
2340
+ flags['field-access-policy-json'],
2341
+ 'field-access-policy-json'
2342
+ ),
2343
+ }
2344
+ : {}),
2337
2345
  ...(flags['data-permission-json']
2338
2346
  ? {
2339
2347
  dataPermission: readJsonArg(
@@ -458,10 +458,17 @@ Body:
458
458
  "dataScope": [{ "type": "self" }],
459
459
  "operations": ["view"],
460
460
  "fieldPermissions": [],
461
+ "fieldAccessPolicy": {
462
+ "defaultAccess": "edit",
463
+ "fields": [{ "fieldId": "internalRemark", "access": "readonly" }]
464
+ },
461
465
  "dataPermission": null
462
466
  }
463
467
  ```
464
468
 
469
+ `fieldPermissions` is only the frontend display-default state. Use
470
+ `fieldAccessPolicy` for backend-enforced field access.
471
+
465
472
  ### GET `/apps/:appType/forms/:formUuid/permission-groups/:groupId`
466
473
 
467
474
  Requires Bearer token. Returns form permission group detail.
@@ -86,20 +86,43 @@ View group:
86
86
  "fieldPermissions": [
87
87
  {
88
88
  "componentName": "Text",
89
- "fieldName": "客户名称",
90
- "label": "customerName",
89
+ "fieldName": "customerName",
90
+ "label": "客户名称",
91
91
  "value": "FORM_FILED_VIEW"
92
92
  }
93
- ]
93
+ ],
94
+ "fieldAccessPolicy": {
95
+ "defaultAccess": "edit",
96
+ "fields": [
97
+ { "fieldId": "internalRemark", "access": "readonly" },
98
+ { "fieldId": "marginAmount", "access": "hidden" }
99
+ ]
100
+ }
94
101
  }
95
102
  ```
96
103
 
97
- Field permission values:
104
+ `fieldPermissions` remains a frontend display-default setting. Do not treat it as real data
105
+ read/write permission. Real backend field access is controlled by `fieldAccessPolicy`.
106
+
107
+ Frontend display-default field permission values:
98
108
 
99
109
  - `FORM_FILED_EDIT`
100
110
  - `FORM_FILED_VIEW`
101
111
  - `FORM_FILED_HIDDEN`
102
112
 
113
+ Real field access policy:
114
+
115
+ - `defaultAccess`: one of `edit`, `readonly`, `hidden`; omitted/null policies are equivalent
116
+ to `{ "defaultAccess": "edit", "fields": [] }`.
117
+ - `fields`: exception list keyed by schema field ID, such as `textField_xxx`; only store
118
+ fields whose access differs from `defaultAccess`.
119
+ - `edit` means visible and editable.
120
+ - `readonly` means visible but not editable.
121
+ - `hidden` means not visible and not editable.
122
+ - If multiple matched view groups apply to the same user, field access merges by
123
+ `edit > readonly > hidden`.
124
+ - App administrators bypass `fieldAccessPolicy`.
125
+
103
126
  Common data scopes:
104
127
 
105
128
  - `all`
@@ -82,10 +82,15 @@ openxiangda permission form-group-create sales_limited \
82
82
  --roles sales \
83
83
  --data-scope-json data-scope.json \
84
84
  --field-permissions-json fields.json \
85
+ --field-access-policy-json field-access-policy.json \
85
86
  --data-permission-json data-permission.json \
86
87
  --profile dev
87
88
  ```
88
89
 
90
+ `fieldPermissions` is the frontend display-default state. Use `fieldAccessPolicy`
91
+ for real backend read/write field access (`edit`, `readonly`, `hidden`) with
92
+ `defaultAccess` plus field-ID exceptions.
93
+
89
94
  ## Inspection
90
95
 
91
96
  ```bash
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openxiangda",
3
- "version": "1.0.40",
3
+ "version": "1.0.41",
4
4
  "description": "OpenXiangda CLI, workspace build tools, runtime SDK, and form components.",
5
5
  "private": false,
6
6
  "bin": {
@@ -10,6 +10,15 @@ interface FieldPermissionDto {
10
10
  label: string;
11
11
  value: "FORM_FILED_EDIT" | "FORM_FILED_VIEW" | "FORM_FILED_HIDDEN";
12
12
  }
13
+ type FieldAccessLevel = "edit" | "readonly" | "hidden";
14
+ interface FieldAccessPolicyItemDto {
15
+ fieldId: string;
16
+ access: FieldAccessLevel;
17
+ }
18
+ interface FieldAccessPolicyDto {
19
+ defaultAccess: FieldAccessLevel;
20
+ fields?: FieldAccessPolicyItemDto[];
21
+ }
13
22
  type ViewFieldPermissionValue = "FORM_FILED_EDIT" | "FORM_FILED_VIEW" | "FORM_FILED_HIDDEN";
14
23
  interface DataPermissionRuleDto {
15
24
  field: string;
@@ -535,6 +544,7 @@ interface FormPermissionGroup {
535
544
  dataScope?: "all" | "self";
536
545
  operations?: string[];
537
546
  fieldPermissions?: FieldPermissionDto[];
547
+ fieldAccessPolicy?: FieldAccessPolicyDto | null;
538
548
  dataPermission?: DataPermissionDto;
539
549
  createdAt?: string;
540
550
  updatedAt?: string;
@@ -553,6 +563,7 @@ interface CreateFormPermissionGroupDto {
553
563
  dataScope?: "all" | "self";
554
564
  operations?: string[];
555
565
  fieldPermissions?: FieldPermissionDto[];
566
+ fieldAccessPolicy?: FieldAccessPolicyDto | null;
556
567
  dataPermission?: DataPermissionDto;
557
568
  }
558
569
  interface UpdateFormPermissionGroupDto {
@@ -564,6 +575,7 @@ interface UpdateFormPermissionGroupDto {
564
575
  dataScope?: "all" | "self";
565
576
  operations?: string[];
566
577
  fieldPermissions?: FieldPermissionDto[];
578
+ fieldAccessPolicy?: FieldAccessPolicyDto | null;
567
579
  dataPermission?: DataPermissionDto;
568
580
  }
569
581
  interface QueryFormPermissionGroupDto {
@@ -965,4 +977,4 @@ declare const usePageRoute: () => PageRouteInfo;
965
977
 
966
978
  declare const usePageSdk: () => PageSdk;
967
979
 
968
- export { type ApiPermissionListParams, type ApproveTaskParams, type AssignPermissionsParams, type AssignRolesParams, type AuthLogoutRedirectOptions, type BatchAddUsersToRoleParams, type BatchSendNotificationByTypeParams, type ChangeUserRoleParams, type ConnectorCallParams, type ConnectorInvokeParams, type ConnectorInvokeResult, type ConnectorRequestBodyType, type ConnectorResponseType, type CreateApiPermissionParams, type CreateFormPermissionGroupDto, type CreatePagePermissionGroupDto, type CreateRoleParams, type CreateUiPermissionParams, type CreateUserParams, type CurrentUserDepartmentParents, type CustomPageEntryConfig, type CustomPageEntryMode, type DataManagementConfigParams, type DataManagementFilterState, type DataPermissionConditionDto, type DataPermissionDto, type DataPermissionRuleDto, type DataViewQueryParams, type DataViewQueryResult, type DataViewStatsParams, type FieldPermissionDto, type FindNotificationConfigParams, type FormAdvancedSearchParams, type FormChangeRecordParams, type FormCreateParams, type FormExportParams, type FormGetDetailParams, type FormImportParams, type FormPermissionGroup, type FormRemoveParams, type FormSearchParams, type FormUpdateParams, type GetParentDepartmentsOptions, type GetProcessInstanceParams, type GetUserRolesParams, type ImportExportRecordDownloadParams, type ImportExportRecordQuery, type InstanceStatus, type NotificationChannel, type NotificationChannelConfig, type NotificationChannelsConfig, type NotificationConfigLevel, type NotificationMessageRecord, type NotificationTemplate, type NotificationTemplatePreview, type NotificationTypeConfig, type PageApiPermissionRecord, type PageApiResponse, type PageAppInfo, type PageBinaryResponse, type PageBridgeApi, type PageContext, type PageDataManagementConfig, type PageDataSourceDescriptor, type PageDepartmentInfo, type PageDepartmentRecord, type PageHttpMethod, type PageInfo, type PageListResult, type PageMessageApi, type PageModalApi, type PageNavigationApi, type PageOffsetListResult, type PagePermissionGroup, type PagePermissionInfo, PageProvider, type PageQueryValue, type PageRequestOptions, type PageRoleRecord, type PageRouteInfo, type PageScope, type PageSdk, type PageSdkError, type PageSdkMeta, type PageTransportDownloadPayload, type PageTransportRequestPayload, type PageUiPermissionRecord, type PageUiPermissionType, type PageUserInfo, type PageUserRecord, type PageUserType, type PreviewNotificationTemplateParams, type ProcessApproveAction, type QueryFormPermissionGroupDto, type QueryPagePermissionGroupDto, type RoleListParams, type RoleUsersParams, type SaveDataManagementConfigParams, type SearchComponentName, type SearchExpression, type SearchFieldKey, type SearchGroup, type SearchLogic, type SearchOperator, type SearchRule, type SearchSortItem, type SearchSystemField, type SendNotificationByTypeParams, type SendNotificationResult, type SubFormRule, type SwitchAppRoleParams, type SwitchPlatformRoleParams, type TerminateProcessInstanceParams, type TriggerCallbackTaskParams, type UiPermissionListParams, type UpdateApiPermissionParams, type UpdateFormPermissionGroupDto, type UpdatePagePermissionGroupDto, type UpdateRoleParams, type UpdateUiPermissionParams, type UpdateUserParams, type UserListParams, type UserMenuPermissionsResponse, type ValidateUserParams, type ViewFieldPermissionValue, type ViewOperationPermission, type ViewPermissionSummary, createPageSdk, createReactPage, useCurrentUser, useDataSource, useFormViewPermissions, useMessage, useModal, useNavigation, usePageContext, usePageProps, usePageRoute, usePageSdk };
980
+ export { type ApiPermissionListParams, type ApproveTaskParams, type AssignPermissionsParams, type AssignRolesParams, type AuthLogoutRedirectOptions, type BatchAddUsersToRoleParams, type BatchSendNotificationByTypeParams, type ChangeUserRoleParams, type ConnectorCallParams, type ConnectorInvokeParams, type ConnectorInvokeResult, type ConnectorRequestBodyType, type ConnectorResponseType, type CreateApiPermissionParams, type CreateFormPermissionGroupDto, type CreatePagePermissionGroupDto, type CreateRoleParams, type CreateUiPermissionParams, type CreateUserParams, type CurrentUserDepartmentParents, type CustomPageEntryConfig, type CustomPageEntryMode, type DataManagementConfigParams, type DataManagementFilterState, type DataPermissionConditionDto, type DataPermissionDto, type DataPermissionRuleDto, type DataViewQueryParams, type DataViewQueryResult, type DataViewStatsParams, type FieldAccessLevel, type FieldAccessPolicyDto, type FieldAccessPolicyItemDto, type FieldPermissionDto, type FindNotificationConfigParams, type FormAdvancedSearchParams, type FormChangeRecordParams, type FormCreateParams, type FormExportParams, type FormGetDetailParams, type FormImportParams, type FormPermissionGroup, type FormRemoveParams, type FormSearchParams, type FormUpdateParams, type GetParentDepartmentsOptions, type GetProcessInstanceParams, type GetUserRolesParams, type ImportExportRecordDownloadParams, type ImportExportRecordQuery, type InstanceStatus, type NotificationChannel, type NotificationChannelConfig, type NotificationChannelsConfig, type NotificationConfigLevel, type NotificationMessageRecord, type NotificationTemplate, type NotificationTemplatePreview, type NotificationTypeConfig, type PageApiPermissionRecord, type PageApiResponse, type PageAppInfo, type PageBinaryResponse, type PageBridgeApi, type PageContext, type PageDataManagementConfig, type PageDataSourceDescriptor, type PageDepartmentInfo, type PageDepartmentRecord, type PageHttpMethod, type PageInfo, type PageListResult, type PageMessageApi, type PageModalApi, type PageNavigationApi, type PageOffsetListResult, type PagePermissionGroup, type PagePermissionInfo, PageProvider, type PageQueryValue, type PageRequestOptions, type PageRoleRecord, type PageRouteInfo, type PageScope, type PageSdk, type PageSdkError, type PageSdkMeta, type PageTransportDownloadPayload, type PageTransportRequestPayload, type PageUiPermissionRecord, type PageUiPermissionType, type PageUserInfo, type PageUserRecord, type PageUserType, type PreviewNotificationTemplateParams, type ProcessApproveAction, type QueryFormPermissionGroupDto, type QueryPagePermissionGroupDto, type RoleListParams, type RoleUsersParams, type SaveDataManagementConfigParams, type SearchComponentName, type SearchExpression, type SearchFieldKey, type SearchGroup, type SearchLogic, type SearchOperator, type SearchRule, type SearchSortItem, type SearchSystemField, type SendNotificationByTypeParams, type SendNotificationResult, type SubFormRule, type SwitchAppRoleParams, type SwitchPlatformRoleParams, type TerminateProcessInstanceParams, type TriggerCallbackTaskParams, type UiPermissionListParams, type UpdateApiPermissionParams, type UpdateFormPermissionGroupDto, type UpdatePagePermissionGroupDto, type UpdateRoleParams, type UpdateUiPermissionParams, type UpdateUserParams, type UserListParams, type UserMenuPermissionsResponse, type ValidateUserParams, type ViewFieldPermissionValue, type ViewOperationPermission, type ViewPermissionSummary, createPageSdk, createReactPage, useCurrentUser, useDataSource, useFormViewPermissions, useMessage, useModal, useNavigation, usePageContext, usePageProps, usePageRoute, usePageSdk };
@@ -10,6 +10,15 @@ interface FieldPermissionDto {
10
10
  label: string;
11
11
  value: "FORM_FILED_EDIT" | "FORM_FILED_VIEW" | "FORM_FILED_HIDDEN";
12
12
  }
13
+ type FieldAccessLevel = "edit" | "readonly" | "hidden";
14
+ interface FieldAccessPolicyItemDto {
15
+ fieldId: string;
16
+ access: FieldAccessLevel;
17
+ }
18
+ interface FieldAccessPolicyDto {
19
+ defaultAccess: FieldAccessLevel;
20
+ fields?: FieldAccessPolicyItemDto[];
21
+ }
13
22
  type ViewFieldPermissionValue = "FORM_FILED_EDIT" | "FORM_FILED_VIEW" | "FORM_FILED_HIDDEN";
14
23
  interface DataPermissionRuleDto {
15
24
  field: string;
@@ -535,6 +544,7 @@ interface FormPermissionGroup {
535
544
  dataScope?: "all" | "self";
536
545
  operations?: string[];
537
546
  fieldPermissions?: FieldPermissionDto[];
547
+ fieldAccessPolicy?: FieldAccessPolicyDto | null;
538
548
  dataPermission?: DataPermissionDto;
539
549
  createdAt?: string;
540
550
  updatedAt?: string;
@@ -553,6 +563,7 @@ interface CreateFormPermissionGroupDto {
553
563
  dataScope?: "all" | "self";
554
564
  operations?: string[];
555
565
  fieldPermissions?: FieldPermissionDto[];
566
+ fieldAccessPolicy?: FieldAccessPolicyDto | null;
556
567
  dataPermission?: DataPermissionDto;
557
568
  }
558
569
  interface UpdateFormPermissionGroupDto {
@@ -564,6 +575,7 @@ interface UpdateFormPermissionGroupDto {
564
575
  dataScope?: "all" | "self";
565
576
  operations?: string[];
566
577
  fieldPermissions?: FieldPermissionDto[];
578
+ fieldAccessPolicy?: FieldAccessPolicyDto | null;
567
579
  dataPermission?: DataPermissionDto;
568
580
  }
569
581
  interface QueryFormPermissionGroupDto {
@@ -965,4 +977,4 @@ declare const usePageRoute: () => PageRouteInfo;
965
977
 
966
978
  declare const usePageSdk: () => PageSdk;
967
979
 
968
- export { type ApiPermissionListParams, type ApproveTaskParams, type AssignPermissionsParams, type AssignRolesParams, type AuthLogoutRedirectOptions, type BatchAddUsersToRoleParams, type BatchSendNotificationByTypeParams, type ChangeUserRoleParams, type ConnectorCallParams, type ConnectorInvokeParams, type ConnectorInvokeResult, type ConnectorRequestBodyType, type ConnectorResponseType, type CreateApiPermissionParams, type CreateFormPermissionGroupDto, type CreatePagePermissionGroupDto, type CreateRoleParams, type CreateUiPermissionParams, type CreateUserParams, type CurrentUserDepartmentParents, type CustomPageEntryConfig, type CustomPageEntryMode, type DataManagementConfigParams, type DataManagementFilterState, type DataPermissionConditionDto, type DataPermissionDto, type DataPermissionRuleDto, type DataViewQueryParams, type DataViewQueryResult, type DataViewStatsParams, type FieldPermissionDto, type FindNotificationConfigParams, type FormAdvancedSearchParams, type FormChangeRecordParams, type FormCreateParams, type FormExportParams, type FormGetDetailParams, type FormImportParams, type FormPermissionGroup, type FormRemoveParams, type FormSearchParams, type FormUpdateParams, type GetParentDepartmentsOptions, type GetProcessInstanceParams, type GetUserRolesParams, type ImportExportRecordDownloadParams, type ImportExportRecordQuery, type InstanceStatus, type NotificationChannel, type NotificationChannelConfig, type NotificationChannelsConfig, type NotificationConfigLevel, type NotificationMessageRecord, type NotificationTemplate, type NotificationTemplatePreview, type NotificationTypeConfig, type PageApiPermissionRecord, type PageApiResponse, type PageAppInfo, type PageBinaryResponse, type PageBridgeApi, type PageContext, type PageDataManagementConfig, type PageDataSourceDescriptor, type PageDepartmentInfo, type PageDepartmentRecord, type PageHttpMethod, type PageInfo, type PageListResult, type PageMessageApi, type PageModalApi, type PageNavigationApi, type PageOffsetListResult, type PagePermissionGroup, type PagePermissionInfo, PageProvider, type PageQueryValue, type PageRequestOptions, type PageRoleRecord, type PageRouteInfo, type PageScope, type PageSdk, type PageSdkError, type PageSdkMeta, type PageTransportDownloadPayload, type PageTransportRequestPayload, type PageUiPermissionRecord, type PageUiPermissionType, type PageUserInfo, type PageUserRecord, type PageUserType, type PreviewNotificationTemplateParams, type ProcessApproveAction, type QueryFormPermissionGroupDto, type QueryPagePermissionGroupDto, type RoleListParams, type RoleUsersParams, type SaveDataManagementConfigParams, type SearchComponentName, type SearchExpression, type SearchFieldKey, type SearchGroup, type SearchLogic, type SearchOperator, type SearchRule, type SearchSortItem, type SearchSystemField, type SendNotificationByTypeParams, type SendNotificationResult, type SubFormRule, type SwitchAppRoleParams, type SwitchPlatformRoleParams, type TerminateProcessInstanceParams, type TriggerCallbackTaskParams, type UiPermissionListParams, type UpdateApiPermissionParams, type UpdateFormPermissionGroupDto, type UpdatePagePermissionGroupDto, type UpdateRoleParams, type UpdateUiPermissionParams, type UpdateUserParams, type UserListParams, type UserMenuPermissionsResponse, type ValidateUserParams, type ViewFieldPermissionValue, type ViewOperationPermission, type ViewPermissionSummary, createPageSdk, createReactPage, useCurrentUser, useDataSource, useFormViewPermissions, useMessage, useModal, useNavigation, usePageContext, usePageProps, usePageRoute, usePageSdk };
980
+ export { type ApiPermissionListParams, type ApproveTaskParams, type AssignPermissionsParams, type AssignRolesParams, type AuthLogoutRedirectOptions, type BatchAddUsersToRoleParams, type BatchSendNotificationByTypeParams, type ChangeUserRoleParams, type ConnectorCallParams, type ConnectorInvokeParams, type ConnectorInvokeResult, type ConnectorRequestBodyType, type ConnectorResponseType, type CreateApiPermissionParams, type CreateFormPermissionGroupDto, type CreatePagePermissionGroupDto, type CreateRoleParams, type CreateUiPermissionParams, type CreateUserParams, type CurrentUserDepartmentParents, type CustomPageEntryConfig, type CustomPageEntryMode, type DataManagementConfigParams, type DataManagementFilterState, type DataPermissionConditionDto, type DataPermissionDto, type DataPermissionRuleDto, type DataViewQueryParams, type DataViewQueryResult, type DataViewStatsParams, type FieldAccessLevel, type FieldAccessPolicyDto, type FieldAccessPolicyItemDto, type FieldPermissionDto, type FindNotificationConfigParams, type FormAdvancedSearchParams, type FormChangeRecordParams, type FormCreateParams, type FormExportParams, type FormGetDetailParams, type FormImportParams, type FormPermissionGroup, type FormRemoveParams, type FormSearchParams, type FormUpdateParams, type GetParentDepartmentsOptions, type GetProcessInstanceParams, type GetUserRolesParams, type ImportExportRecordDownloadParams, type ImportExportRecordQuery, type InstanceStatus, type NotificationChannel, type NotificationChannelConfig, type NotificationChannelsConfig, type NotificationConfigLevel, type NotificationMessageRecord, type NotificationTemplate, type NotificationTemplatePreview, type NotificationTypeConfig, type PageApiPermissionRecord, type PageApiResponse, type PageAppInfo, type PageBinaryResponse, type PageBridgeApi, type PageContext, type PageDataManagementConfig, type PageDataSourceDescriptor, type PageDepartmentInfo, type PageDepartmentRecord, type PageHttpMethod, type PageInfo, type PageListResult, type PageMessageApi, type PageModalApi, type PageNavigationApi, type PageOffsetListResult, type PagePermissionGroup, type PagePermissionInfo, PageProvider, type PageQueryValue, type PageRequestOptions, type PageRoleRecord, type PageRouteInfo, type PageScope, type PageSdk, type PageSdkError, type PageSdkMeta, type PageTransportDownloadPayload, type PageTransportRequestPayload, type PageUiPermissionRecord, type PageUiPermissionType, type PageUserInfo, type PageUserRecord, type PageUserType, type PreviewNotificationTemplateParams, type ProcessApproveAction, type QueryFormPermissionGroupDto, type QueryPagePermissionGroupDto, type RoleListParams, type RoleUsersParams, type SaveDataManagementConfigParams, type SearchComponentName, type SearchExpression, type SearchFieldKey, type SearchGroup, type SearchLogic, type SearchOperator, type SearchRule, type SearchSortItem, type SearchSystemField, type SendNotificationByTypeParams, type SendNotificationResult, type SubFormRule, type SwitchAppRoleParams, type SwitchPlatformRoleParams, type TerminateProcessInstanceParams, type TriggerCallbackTaskParams, type UiPermissionListParams, type UpdateApiPermissionParams, type UpdateFormPermissionGroupDto, type UpdatePagePermissionGroupDto, type UpdateRoleParams, type UpdateUiPermissionParams, type UpdateUserParams, type UserListParams, type UserMenuPermissionsResponse, type ValidateUserParams, type ViewFieldPermissionValue, type ViewOperationPermission, type ViewPermissionSummary, createPageSdk, createReactPage, useCurrentUser, useDataSource, useFormViewPermissions, useMessage, useModal, useNavigation, usePageContext, usePageProps, usePageRoute, usePageSdk };