adminizer 5.0.0-build.2 → 5.0.0-build.21
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/assets/abnfDiagram-VCTEODGH-CkmsvdDi.js +1 -0
- package/assets/add-CESPH_aI.js +1 -0
- package/assets/add-group-CQ4Xm8Ru.js +1 -0
- package/assets/add-user-B-QNjR4B.js +1 -0
- package/assets/ai-assistant/agent.es.js +28362 -0
- package/assets/app-C5Ju5Zra.css +1 -0
- package/assets/app-Ca5yUSBv.js +138 -0
- package/assets/arc-B-Dt8YNl.js +1 -0
- package/assets/architectureDiagram-5GKGNRK7-Ca58kq-l.js +36 -0
- package/assets/asmcrypto-DZeQH0LC.js +1 -0
- package/assets/blockDiagram-NRAW4CY4-CuqE52IG.js +129 -0
- package/assets/c4Diagram-UCG6FXSJ-Cx8z-0Bw.js +38 -0
- package/assets/catalog-CkSbxvx0.js +6 -0
- package/assets/channel-C9z6Pi_j.js +1 -0
- package/assets/chunk-2Q5K7J3B-CXISVKTC.js +1 -0
- package/assets/chunk-5VM5RSS4-DYGeeVYe.js +15 -0
- package/assets/chunk-F27PBJKO-BeY-dbKj.js +1 -0
- package/assets/chunk-G27WJ6UU-DeX_eH7C.js +231 -0
- package/assets/chunk-JWPE2WC7-DaxI9q0u.js +1 -0
- package/assets/chunk-LCL6LL3I-B7PkaEz_.js +206 -0
- package/assets/chunk-POPQ4Y6H-lwu6ZpsN.js +1 -0
- package/assets/chunk-SVP7TREG-CVFllgl1.js +88 -0
- package/assets/chunk-XXDRQBXY-DDLN0rcg.js +1 -0
- package/assets/classDiagram-DTDB5LWJ-BKtCIC3B.js +1 -0
- package/assets/classDiagram-v2-JRS7N3AN-BKtCIC3B.js +1 -0
- package/assets/controls/ckeditor.es.js +9370 -9306
- package/assets/controls/handsontable.es.js +11971 -11938
- package/assets/controls/jsoneditor.es.js +13104 -13008
- package/assets/controls/leaflet.es.js +1023 -1004
- package/assets/controls/toast-ui.es.js +1843 -1834
- package/assets/cose-bilkent-JH36ORCC-CWRyUkhQ.js +1 -0
- package/assets/cynefin-OW5HDTMX-B1iLDXCC.js +166 -0
- package/assets/cynefinDiagram-5FMLGOSQ-DaXQHr3l.js +62 -0
- package/assets/cytoscape.esm-yzknjiTM.js +321 -0
- package/assets/dagre-3AP2YEHR-DFORa4Hz.js +4 -0
- package/assets/dashboard-Ssa1_Of3.js +3 -0
- package/assets/debounce-B3mXI_sx.js +1 -0
- package/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/assets/diagram-S7CK7UJ4-CgP6KBo0.js +30 -0
- package/assets/diagram-UQ7AKVKN-oYfQe6w0.js +41 -0
- package/assets/diagram-VSXAHHWV-DfCU5wgt.js +3 -0
- package/assets/diagram-VX7I27RA-BITJVrNY.js +24 -0
- package/assets/diagram-Z3DM3KII-D8J9Ssjy.js +24 -0
- package/assets/docs-DHMt_Rq1.js +1 -0
- package/assets/ebnfDiagram-PWID7BFC-qpNmoYgx.js +1 -0
- package/assets/erDiagram-SSCWMZ5O-DDF-Y0zs.js +99 -0
- package/assets/flowDiagram-A5DVABFB-CjKVkR9T.js +168 -0
- package/assets/ganttDiagram-EL5Y4UJY-BXGQ53w6.js +292 -0
- package/assets/gitGraphDiagram-WWUBYQGX-BLMevdLh.js +106 -0
- package/assets/history-tBOo2gd5.js +1 -0
- package/assets/infoDiagram-RXCK75RN-BAnPdnyw.js +2 -0
- package/assets/init-Gi6I4Gst.js +1 -0
- package/assets/init-user-DrNUHa6r.js +1 -0
- package/assets/isObject-DL-BuaBl.js +1 -0
- package/assets/ishikawaDiagram-5VMMS53U-PnL0Z4Li.js +70 -0
- package/assets/journeyDiagram-EYS64GPL-CLcsCSwF.js +139 -0
- package/assets/kanban-definition-3QL26DDD-C2eU3uBE.js +89 -0
- package/assets/katex-HP8lGamR.js +257 -0
- package/assets/layout-BXoYdHdx.js +1 -0
- package/assets/linear-BSzrP0oP.js +1 -0
- package/assets/list-CLg6xeIK.js +4 -0
- package/assets/login-Ce7o3-o_.js +1 -0
- package/assets/manifest.json +834 -58
- package/assets/{media-manager-BDbpSSjH.js → media-manager-D7G1P3fz.js} +3 -3
- package/assets/mermaid.core-aKMJHeEk.js +310 -0
- package/assets/mindmap-definition-FBJOCRG2-Dzbz5ghA.js +96 -0
- package/assets/module-BsXph_pA.js +1 -0
- package/assets/notification-D-Zz1gF_.js +20 -0
- package/assets/ordinal-Cboi1Yqb.js +1 -0
- package/assets/pegDiagram-XKGWAZYB-BTdWkU0Y.js +1 -0
- package/assets/pieDiagram-E7YTZNPT-Dnw8-TB-.js +39 -0
- package/assets/quadrantDiagram-AXDQQJYC-CALzLlg9.js +7 -0
- package/assets/railroadDiagram-O6MQD6OU-CTA1vzcv.js +1 -0
- package/assets/register-CNnBkzej.js +1 -0
- package/assets/requirementDiagram-EFPCY7ZU-UX2CF5HA.js +84 -0
- package/assets/ru-CoNgAwFK.js +1 -0
- package/assets/sankeyDiagram-P5KCCOFB-4aPp3ATV.js +40 -0
- package/assets/sequenceDiagram-WJ2MYXX4--kltkwJw.js +162 -0
- package/assets/sizeCapture-X5ZJPWSS-Ca9-g5QY.js +1 -0
- package/assets/stateDiagram-HBIQ2CUA-Diaf5Q7I.js +1 -0
- package/assets/stateDiagram-v2-4QOOHH4V-C6FlRp7u.js +1 -0
- package/assets/swimlanes-XN3QIQJK-DhqX_myE.js +1 -0
- package/assets/swimlanesDiagram-VK2B7HYN-i_3LTEBk.js +8 -0
- package/assets/timeline-definition-24CTP7MA-CwkJQbhq.js +120 -0
- package/assets/toNumber-DZb-r9sy.js +1 -0
- package/assets/use-appearance-DC-DESKB.js +1 -0
- package/assets/user-filters-list-W47DTBp2.js +1 -0
- package/assets/vennDiagram-4TSXK5OY-BNM3_cVS.js +34 -0
- package/assets/wardleyDiagram-VM6X3IG4-BODb1NP8.js +78 -0
- package/assets/welcome-BeBm6NIi.js +1 -0
- package/assets/with-app-layout-B90DtzYC.js +31 -0
- package/assets/xychartDiagram-S5SC5T6Z-DthqEh3g.js +7 -0
- package/controllers/access-rights/permissionOptions.d.ts +2 -0
- package/controllers/access-rights/permissionOptions.js +23 -0
- package/controllers/add.js +1 -1
- package/controllers/addGroup.js +15 -6
- package/controllers/ai/AiAgentController.d.ts +66 -0
- package/controllers/ai/AiAgentController.js +435 -0
- package/controllers/ai/AiAssistantController.d.ts +0 -4
- package/controllers/ai/AiAssistantController.js +4 -78
- package/controllers/catalog/FrontendCatalogAdapter.d.ts +1 -1
- package/controllers/catalog/FrontentCatalogAdapter.d.ts +1 -1
- package/controllers/docs/index.d.ts +22 -0
- package/controllers/docs/index.js +126 -0
- package/controllers/edit.js +1 -1
- package/controllers/editGroup.js +15 -6
- package/controllers/feedback/feedbackController.d.ts +1 -1
- package/controllers/filter-fields/savedFilters.js +1 -1
- package/controllers/history-actions/HistoryController.d.ts +1 -1
- package/controllers/history-actions/HistoryController.js +6 -6
- package/controllers/list.js +1 -1
- package/controllers/login.js +1 -1
- package/controllers/media-manager/mediaManagerAdapter.d.ts +1 -1
- package/controllers/notifications/NotificationController.js +14 -8
- package/controllers/view.js +2 -2
- package/controllers/widgets/filterInfo.js +1 -1
- package/helpers/accessRightsHelper.d.ts +11 -4
- package/helpers/accessRightsHelper.js +82 -12
- package/helpers/assetVersionHelper.d.ts +14 -0
- package/helpers/assetVersionHelper.js +42 -0
- package/helpers/configHelper.d.ts +3 -3
- package/helpers/configHelper.js +20 -18
- package/helpers/controllerHelper.d.ts +3 -2
- package/helpers/controllerHelper.js +25 -15
- package/helpers/fieldsHelper.d.ts +2 -2
- package/helpers/fieldsHelper.js +3 -3
- package/helpers/filterDatetimeHelper.d.ts +1 -1
- package/helpers/inertiaActionsHelper.d.ts +3 -3
- package/helpers/inertiaActionsHelper.js +4 -5
- package/helpers/inertiaAddHelper.d.ts +5 -5
- package/helpers/inertiaAddHelper.js +7 -6
- package/helpers/inertiaGroupHelper.d.ts +3 -3
- package/helpers/inertiaGroupHelper.js +10 -2
- package/helpers/inertiaListHelper.d.ts +4 -4
- package/helpers/inertiaListHelper.js +7 -8
- package/helpers/inertiaMenuHelper.d.ts +2 -3
- package/helpers/inertiaMenuHelper.js +3 -26
- package/helpers/inertiaUserHelper.d.ts +3 -3
- package/helpers/menuHelper.d.ts +2 -2
- package/helpers/modelResourceHelper.d.ts +9 -0
- package/helpers/modelResourceHelper.js +43 -0
- package/helpers/navigationAccessHelper.d.ts +13 -0
- package/helpers/navigationAccessHelper.js +40 -0
- package/helpers/translationHelper.d.ts +2 -2
- package/index.d.ts +69 -58
- package/index.js +11 -0
- package/interfaces/adminpanelConfig.d.ts +18 -5
- package/interfaces/global.d.ts +6 -6
- package/interfaces/internalModelAccess.d.ts +1 -1
- package/interfaces/listQueryBuilder.d.ts +1 -1
- package/interfaces/types.d.ts +171 -2
- package/lib/Adminizer.d.ts +46 -26
- package/lib/Adminizer.js +37 -1
- package/lib/DataAccessor.d.ts +7 -6
- package/lib/DataAccessor.js +50 -48
- package/lib/MiddlewareManager.d.ts +1 -1
- package/lib/access-rights/AccessRightsHandler.d.ts +2 -2
- package/lib/admin-links/AdminLinkHandler.d.ts +72 -0
- package/lib/admin-links/AdminLinkHandler.js +175 -0
- package/lib/ai-assistant/AbstractAiConversationHistoryService.d.ts +39 -0
- package/lib/ai-assistant/AbstractAiConversationHistoryService.js +98 -0
- package/lib/ai-assistant/AbstractAiModelService.d.ts +140 -3
- package/lib/ai-assistant/AbstractAiModelService.js +154 -1
- package/lib/ai-assistant/AiAgentRunManager.d.ts +35 -0
- package/lib/ai-assistant/AiAgentRunManager.js +109 -0
- package/lib/ai-assistant/AiAssistantAgentSkillHandler.d.ts +58 -0
- package/lib/ai-assistant/AiAssistantAgentSkillHandler.js +87 -0
- package/lib/ai-assistant/AiAssistantHandler.d.ts +16 -5
- package/lib/ai-assistant/AiAssistantHandler.js +35 -1
- package/lib/ai-assistant/AiAssistantUiMethodHandler.d.ts +60 -0
- package/lib/ai-assistant/AiAssistantUiMethodHandler.js +138 -0
- package/lib/ai-assistant/builtinAgentSkills.d.ts +9 -0
- package/lib/ai-assistant/builtinAgentSkills.js +256 -0
- package/lib/ai-assistant/jsonSafe.d.ts +13 -0
- package/lib/ai-assistant/jsonSafe.js +81 -0
- package/lib/app-manager/AdminizerApp.d.ts +40 -11
- package/lib/app-manager/AppManager.d.ts +2 -2
- package/lib/app-manager/AppManager.js +54 -50
- package/lib/app-manager/AssetHandler.d.ts +2 -2
- package/lib/app-manager/ConfigLayerHandler.d.ts +2 -2
- package/lib/app-manager/ControllerHandler.d.ts +2 -2
- package/lib/catalog/AbstractCatalog.d.ts +1 -1
- package/lib/catalog/CatalogHandler.d.ts +1 -1
- package/lib/controls/ControlsHandler.d.ts +1 -1
- package/lib/controls/codeEditor/MonacoEditor.d.ts +1 -1
- package/lib/controls/geojsoneditor/GeoEditor.d.ts +1 -1
- package/lib/controls/jsoneditor/JsonEditor.d.ts +1 -1
- package/lib/controls/markdown/ToastUiEditor.d.ts +1 -1
- package/lib/controls/table/Handsontable.d.ts +1 -1
- package/lib/controls/wysiwyg/CKeditor.d.ts +1 -1
- package/lib/docs/AbstractDocumentation.d.ts +100 -0
- package/lib/docs/AbstractDocumentation.js +108 -0
- package/lib/docs/DocumentationHandler.d.ts +100 -0
- package/lib/docs/DocumentationHandler.js +198 -0
- package/lib/docs/FileDocumentation.d.ts +47 -0
- package/lib/docs/FileDocumentation.js +189 -0
- package/lib/docs/docsAgentSkills.d.ts +10 -0
- package/lib/docs/docsAgentSkills.js +93 -0
- package/lib/feedback/FeedbackHandler.d.ts +2 -2
- package/lib/filters/ConditionValidator.d.ts +1 -1
- package/lib/filters/FilterCustomFieldHandler.d.ts +2 -2
- package/lib/filters/FilterService.d.ts +4 -4
- package/lib/filters/FilterService.js +4 -3
- package/lib/filters/index.d.ts +6 -6
- package/lib/history-actions/AbstractHistoryAdapter.d.ts +6 -6
- package/lib/history-actions/AbstractHistoryAdapter.js +11 -9
- package/lib/history-actions/DefaultHistoryAdapter.d.ts +4 -4
- package/lib/history-actions/HistoryHandler.d.ts +1 -1
- package/lib/list-query-builder/ListQueryBuilder.d.ts +7 -7
- package/lib/media-manager/AbstractMediaManager.d.ts +2 -2
- package/lib/media-manager/MediaManagerHandler.d.ts +1 -1
- package/lib/media-manager/Thumb.d.ts +1 -1
- package/lib/media-manager/helpers/MediaManagerHelper.d.ts +5 -5
- package/lib/model/AbstractModel.d.ts +11 -4
- package/lib/model/InternalModelAccessFactory.d.ts +2 -2
- package/lib/model/ModelHandler.d.ts +50 -5
- package/lib/model/ModelHandler.js +107 -8
- package/lib/model/adapter/sequelize.d.ts +7 -5
- package/lib/model/adapter/sequelize.js +79 -46
- package/lib/model/adapter/typeorm.d.ts +2 -2
- package/lib/model/adapter/typeorm.js +1 -1
- package/lib/model/internalModelRepository.d.ts +2 -2
- package/lib/notifications/AbstractNotificationService.d.ts +4 -4
- package/lib/notifications/GeneralNotificationService.d.ts +2 -2
- package/lib/notifications/GeneralNotificationService.js +6 -5
- package/lib/notifications/NotificationHandler.d.ts +2 -2
- package/lib/notifications/SystemNotificationService.d.ts +2 -2
- package/lib/notifications/SystemNotificationService.js +1 -1
- package/lib/requestProcessor.d.ts +1 -1
- package/lib/ui-i18n/uiTranslationKeys.d.ts +2 -1
- package/lib/ui-i18n/uiTranslationKeys.js +42 -1
- package/lib/widgets/abstractAction.d.ts +1 -1
- package/lib/widgets/abstractCustom.d.ts +2 -2
- package/lib/widgets/abstractInfo.d.ts +1 -1
- package/lib/widgets/abstractLink.d.ts +2 -2
- package/lib/widgets/abstractSwitch.d.ts +1 -1
- package/lib/widgets/abstractWidgetBase.d.ts +1 -1
- package/lib/widgets/widgetHandler.d.ts +9 -9
- package/lib/widgets/widgetHandler.js +5 -1
- package/models/Filter.d.ts +1 -1
- package/models/FilterColumn.d.ts +1 -1
- package/models/Group.d.ts +3 -2
- package/models/HistoryActions.d.ts +1 -1
- package/models/MediaManagerAP.d.ts +2 -2
- package/models/MediaManagerAssociationsAP.d.ts +1 -1
- package/models/MediaManagerMetaAP.d.ts +1 -1
- package/models/User.d.ts +2 -2
- package/models/UserNotification.d.ts +1 -1
- package/package.json +29 -20
- package/policies/authPolicies.js +6 -6
- package/policies/permissionResolvers.d.ts +1 -0
- package/policies/permissionResolvers.js +3 -0
- package/services/FeedService.d.ts +3 -3
- package/system/Router.d.ts +1 -1
- package/system/Router.js +27 -1
- package/system/bindAccessRights.d.ts +1 -1
- package/system/bindAccessRights.js +2 -3
- package/system/bindAuthorization.d.ts +1 -1
- package/system/bindControls.d.ts +1 -1
- package/system/bindCors.d.ts +1 -1
- package/system/bindCustomFilterHandlers.d.ts +1 -1
- package/system/bindDashboardWidgets.d.ts +1 -1
- package/system/bindDev.d.ts +1 -1
- package/system/bindDocs.d.ts +13 -0
- package/system/bindDocs.js +77 -0
- package/system/bindHistory.d.ts +1 -1
- package/system/bindInertia.d.ts +1 -1
- package/system/bindInertia.js +23 -1
- package/system/bindMediaManager.d.ts +1 -1
- package/system/bindNotifications.d.ts +1 -1
- package/system/bindReqFunctions.d.ts +1 -1
- package/system/bindTranslations.d.ts +1 -1
- package/system/buildInternalModelAccess.d.ts +3 -3
- package/system/buildInternalModelAccess.js +5 -2
- package/system/defaults.d.ts +1 -1
- package/system/routePolicies.d.ts +1 -1
- package/system/systemModelContracts.d.ts +1 -1
- package/system/systemModelContracts.js +11 -7
- package/system/validateSystemModels.d.ts +1 -1
- package/system/validateSystemModels.js +29 -9
- package/assets/add-group-BdHFzKng.js +0 -1
- package/assets/add-p6yGCoZ7.js +0 -1
- package/assets/add-user-CDspCLu4.js +0 -1
- package/assets/app-DNXiApCk.css +0 -1
- package/assets/app-layout-DCr_-JY3.js +0 -1
- package/assets/app.js +0 -138
- package/assets/catalog-XN-_p9TB.js +0 -6
- package/assets/dashboard-CHZO2QFY.js +0 -3
- package/assets/debounce-BMmXVQ06.js +0 -1
- package/assets/history-CQd0FojQ.js +0 -1
- package/assets/init-user-8aUohVDq.js +0 -1
- package/assets/list-PHWgTHsg.js +0 -4
- package/assets/login-CO4laf6m.js +0 -1
- package/assets/module-DVyQtIxm.js +0 -1
- package/assets/notification-B87XG8nQ.js +0 -20
- package/assets/register-DBYIMXGQ.js +0 -1
- package/assets/ru-rYKdQbWF.js +0 -1
- package/assets/use-appearance-_EbbjHTh.js +0 -1
- package/assets/user-filters-list-BRzDbPkx.js +0 -1
- package/assets/welcome-DiXmrTgc.js +0 -1
|
@@ -25,8 +25,9 @@ export class FilterService {
|
|
|
25
25
|
if (!models) {
|
|
26
26
|
return null;
|
|
27
27
|
}
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
const foundKey = Object.prototype.hasOwnProperty.call(models, modelName)
|
|
29
|
+
? modelName
|
|
30
|
+
: Object.keys(models).find(key => key.toLowerCase() === modelName.toLowerCase());
|
|
30
31
|
if (!foundKey) {
|
|
31
32
|
return null;
|
|
32
33
|
}
|
|
@@ -35,7 +36,7 @@ export class FilterService {
|
|
|
35
36
|
return null;
|
|
36
37
|
}
|
|
37
38
|
// Get AbstractModel
|
|
38
|
-
const model = this.adminizer.modelHandler.
|
|
39
|
+
const model = this.adminizer.modelHandler.getResource(foundKey);
|
|
39
40
|
if (!model) {
|
|
40
41
|
return null;
|
|
41
42
|
}
|
package/lib/filters/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { FilterService, default as FilterServiceDefault } from './FilterService';
|
|
2
|
-
export { CustomFilterHandler, default as CustomFilterHandlerDefault } from './CustomFilterHandler';
|
|
3
|
-
export { AbstractCustomFilter } from './CustomFilterHandler';
|
|
4
|
-
export type { FilterCustomFieldCondition, RegisterOptions, FilterCustomFieldInputConfig, FilterCustomFieldInputDefinition, FilterCustomFieldInputType } from './CustomFilterHandler';
|
|
5
|
-
export { ConditionValidator, default as ConditionValidatorDefault } from './ConditionValidator';
|
|
6
|
-
export type { ValidationResult, ValidationError, FieldConfig, SecurityEvent, SecurityEventType } from './ConditionValidator';
|
|
1
|
+
export { FilterService, default as FilterServiceDefault } from './FilterService.js';
|
|
2
|
+
export { CustomFilterHandler, default as CustomFilterHandlerDefault } from './CustomFilterHandler.js';
|
|
3
|
+
export { AbstractCustomFilter } from './CustomFilterHandler.js';
|
|
4
|
+
export type { FilterCustomFieldCondition, RegisterOptions, FilterCustomFieldInputConfig, FilterCustomFieldInputDefinition, FilterCustomFieldInputType } from './CustomFilterHandler.js';
|
|
5
|
+
export { ConditionValidator, default as ConditionValidatorDefault } from './ConditionValidator.js';
|
|
6
|
+
export type { ValidationResult, ValidationError, FieldConfig, SecurityEvent, SecurityEventType } from './ConditionValidator.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { HistoryActions } from "../../models/HistoryActions";
|
|
2
|
-
import { User } from "../../models/User";
|
|
3
|
-
import { Adminizer } from "../Adminizer";
|
|
4
|
-
import { Fields } from "../../helpers/fieldsHelper";
|
|
5
|
-
import { ActionType } from "../../interfaces/adminpanelConfig";
|
|
6
|
-
import { ModelResource } from "../../interfaces/types";
|
|
1
|
+
import { HistoryActions } from "../../models/HistoryActions.js";
|
|
2
|
+
import { User } from "../../models/User.js";
|
|
3
|
+
import { Adminizer } from "../Adminizer.js";
|
|
4
|
+
import { Fields } from "../../helpers/fieldsHelper.js";
|
|
5
|
+
import { ActionType } from "../../interfaces/adminpanelConfig.js";
|
|
6
|
+
import { ModelResource } from "../../interfaces/types.js";
|
|
7
7
|
/**
|
|
8
8
|
* Abstract base class for handling history operations in the AdminPanel.
|
|
9
9
|
* Provides common methods and structure for retrieving, filtering, and formatting historical data.
|
|
@@ -86,9 +86,9 @@ export class AbstractHistoryAdapter {
|
|
|
86
86
|
* @returns Array of model names (in lowercase) the user can access.
|
|
87
87
|
*/
|
|
88
88
|
getModels(user) {
|
|
89
|
-
const models = this.adminizer.modelHandler.
|
|
90
|
-
.filter(model => !this.excludedModels.has(model.modelname))
|
|
91
|
-
.map(
|
|
89
|
+
const models = Array.from(this.adminizer.modelHandler.model.entries())
|
|
90
|
+
.filter(([, model]) => !this.excludedModels.has(model.modelname))
|
|
91
|
+
.map(([resourceName]) => resourceName);
|
|
92
92
|
const accessModels = [];
|
|
93
93
|
for (const model of models) {
|
|
94
94
|
const access = this.adminizer.accessRightsHelper.enoughPermissions([
|
|
@@ -304,14 +304,15 @@ export class AbstractHistoryAdapter {
|
|
|
304
304
|
* @protected
|
|
305
305
|
*/
|
|
306
306
|
findModelResource(history) {
|
|
307
|
-
const modelResourceName = history.modelName
|
|
307
|
+
const modelResourceName = this.adminizer.modelHandler.getResourceRecord(history.modelName)?.name
|
|
308
|
+
?? history.modelName;
|
|
308
309
|
const modelResourceUri = `${this.adminizer.config.routePrefix}/model/${modelResourceName}`;
|
|
309
310
|
const models = this.adminizer.config.models;
|
|
310
311
|
const foundKey = Object.keys(models).find(key => key.toLowerCase() === modelResourceName.toLowerCase());
|
|
311
312
|
const modelResource = {
|
|
312
313
|
name: modelResourceName,
|
|
313
314
|
uri: modelResourceUri,
|
|
314
|
-
model: this.adminizer.modelHandler.
|
|
315
|
+
model: this.adminizer.modelHandler.getResource(modelResourceName),
|
|
315
316
|
config: models[foundKey]
|
|
316
317
|
};
|
|
317
318
|
return modelResource;
|
|
@@ -341,8 +342,9 @@ export class AbstractHistoryAdapter {
|
|
|
341
342
|
Adminizer.log.error('No model found for field: ', fields[key]);
|
|
342
343
|
return;
|
|
343
344
|
}
|
|
344
|
-
|
|
345
|
-
|
|
345
|
+
const resourceName = this.adminizer.modelHandler.resolveAssociationResource(modelName, fields[key].model.resourceName);
|
|
346
|
+
let Model = resourceName ? this.adminizer.modelHandler.getResource(resourceName) : undefined;
|
|
347
|
+
if (!Model || !resourceName) {
|
|
346
348
|
return;
|
|
347
349
|
}
|
|
348
350
|
let list;
|
|
@@ -351,8 +353,8 @@ export class AbstractHistoryAdapter {
|
|
|
351
353
|
Adminizer.log.warn("Warning: executing malicious job trying to add a huge amount of records in field config," +
|
|
352
354
|
" please rewrite this part of code in the nearest future");
|
|
353
355
|
let modelResource = {
|
|
354
|
-
name:
|
|
355
|
-
model: Model, uri: `${this.adminizer.config.routePrefix}/model/${
|
|
356
|
+
name: resourceName, config: this.adminizer.config.models[resourceName],
|
|
357
|
+
model: Model, uri: `${this.adminizer.config.routePrefix}/model/${resourceName}`
|
|
356
358
|
};
|
|
357
359
|
let dataAccessor = new DataAccessor(this.adminizer, user, modelResource, "view");
|
|
358
360
|
list = await Model.find({}, dataAccessor);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { HistoryActions } from "../../models/HistoryActions";
|
|
2
|
-
import { User } from "../../models/User";
|
|
3
|
-
import { Adminizer } from "../Adminizer";
|
|
4
|
-
import { AbstractHistoryAdapter } from "./AbstractHistoryAdapter";
|
|
1
|
+
import { HistoryActions } from "../../models/HistoryActions.js";
|
|
2
|
+
import { User } from "../../models/User.js";
|
|
3
|
+
import { Adminizer } from "../Adminizer.js";
|
|
4
|
+
import { AbstractHistoryAdapter } from "./AbstractHistoryAdapter.js";
|
|
5
5
|
export declare class DefaultHistoryAdapter extends AbstractHistoryAdapter {
|
|
6
6
|
id: string;
|
|
7
7
|
model: string;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Fields } from '../../helpers/fieldsHelper';
|
|
2
|
-
import { AbstractModel } from '../model/AbstractModel';
|
|
3
|
-
import { DataAccessor } from '../DataAccessor';
|
|
4
|
-
import { FilterOperator } from '../../models/Filter';
|
|
5
|
-
import { CustomFilterHandler } from '../filters/CustomFilterHandler';
|
|
6
|
-
import { ListQueryBuilderParams, ListQueryBuilderResult } from '../../interfaces/listQueryBuilder';
|
|
7
|
-
import { CriteriaWhere } from '../../interfaces/queryCriteria';
|
|
1
|
+
import { Fields } from '../../helpers/fieldsHelper.js';
|
|
2
|
+
import { AbstractModel } from '../model/AbstractModel.js';
|
|
3
|
+
import { DataAccessor } from '../DataAccessor.js';
|
|
4
|
+
import { FilterOperator } from '../../models/Filter.js';
|
|
5
|
+
import { CustomFilterHandler } from '../filters/CustomFilterHandler.js';
|
|
6
|
+
import { ListQueryBuilderParams, ListQueryBuilderResult } from '../../interfaces/listQueryBuilder.js';
|
|
7
|
+
import { CriteriaWhere } from '../../interfaces/queryCriteria.js';
|
|
8
8
|
/**
|
|
9
9
|
* Security limits for filter conditions
|
|
10
10
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { MediaManagerMetaAP } from "../../models/MediaManagerMetaAP";
|
|
2
|
-
import { Adminizer } from "../Adminizer";
|
|
1
|
+
import type { MediaManagerMetaAP } from "../../models/MediaManagerMetaAP.js";
|
|
2
|
+
import { Adminizer } from "../Adminizer.js";
|
|
3
3
|
export interface MediaManagerItem {
|
|
4
4
|
id?: string;
|
|
5
5
|
parent: string | null;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { Fields } from "../../../helpers/fieldsHelper";
|
|
2
|
-
import { MediaManagerWidgetData, MediaManagerItem, MediaManagerWidgetItem, MediaManagerWidgetJSON } from "../AbstractMediaManager";
|
|
3
|
-
import { BaseFieldConfig } from "../../../interfaces/adminpanelConfig";
|
|
4
|
-
import { Adminizer } from "../../Adminizer";
|
|
5
|
-
import type { AppRuntime } from "../../app-manager/AdminizerApp";
|
|
1
|
+
import { Fields } from "../../../helpers/fieldsHelper.js";
|
|
2
|
+
import { MediaManagerWidgetData, MediaManagerItem, MediaManagerWidgetItem, MediaManagerWidgetJSON } from "../AbstractMediaManager.js";
|
|
3
|
+
import { BaseFieldConfig } from "../../../interfaces/adminpanelConfig.js";
|
|
4
|
+
import { Adminizer } from "../../Adminizer.js";
|
|
5
|
+
import type { AppRuntime } from "../../app-manager/AdminizerApp.js";
|
|
6
6
|
type PostParams = Record<string, string | number | boolean | object | string[] | number[] | null>;
|
|
7
7
|
export declare function isMediaManagerFieldConfig(fieldConfig: BaseFieldConfig): boolean;
|
|
8
8
|
export declare function normalizeMediaManagerWidgetData(value: PostParams[string] | undefined, prop: string): MediaManagerWidgetData[];
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
import { DataAccessor } from "../DataAccessor";
|
|
2
|
-
import { QueryCriteria } from "../../interfaces/queryCriteria";
|
|
3
|
-
import { InternalModelRepository } from "../../interfaces/internalModelAccess";
|
|
1
|
+
import { DataAccessor } from "../DataAccessor.js";
|
|
2
|
+
import { QueryCriteria } from "../../interfaces/queryCriteria.js";
|
|
3
|
+
import { InternalModelRepository } from "../../interfaces/internalModelAccess.js";
|
|
4
4
|
export interface Attribute {
|
|
5
|
-
|
|
5
|
+
/**
|
|
6
|
+
* `date` covers every temporal column (date, time, timestamp). It is deliberately
|
|
7
|
+
* separate from `string`: dates must not take part in LIKE search, and the UI
|
|
8
|
+
* renders them with date controls.
|
|
9
|
+
*/
|
|
10
|
+
type: 'association' | 'association-many' | 'number' | 'json' | 'string' | 'boolean' | 'date' | 'ref';
|
|
6
11
|
required?: boolean;
|
|
7
12
|
unique?: boolean;
|
|
8
13
|
defaultsTo?: any;
|
|
9
14
|
columnName?: string;
|
|
10
15
|
model?: string;
|
|
11
16
|
collection?: string;
|
|
17
|
+
/** Canonical Adminizer resource target for a system-model association. */
|
|
18
|
+
resourceName?: string;
|
|
12
19
|
via?: string;
|
|
13
20
|
allowNull?: boolean;
|
|
14
21
|
/**
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { InternalModelAccessMap, InternalModelRepository } from "../../interfaces/internalModelAccess";
|
|
2
|
-
import { AbstractModel } from "./AbstractModel";
|
|
1
|
+
import { InternalModelAccessMap, InternalModelRepository } from "../../interfaces/internalModelAccess.js";
|
|
2
|
+
import { AbstractModel } from "./AbstractModel.js";
|
|
3
3
|
export declare const DEFAULT_INTERNAL_MODEL_ACCESS: InternalModelAccessMap;
|
|
4
4
|
export declare class InternalModelScope {
|
|
5
5
|
private readonly getModel;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AbstractModel } from "./AbstractModel";
|
|
2
|
-
import { InternalModelAccessMap, InternalModelRepository } from "../../interfaces/internalModelAccess";
|
|
3
|
-
import { InternalModelScope } from "./InternalModelAccessFactory";
|
|
1
|
+
import { AbstractModel } from "./AbstractModel.js";
|
|
2
|
+
import { InternalModelAccessMap, InternalModelRepository } from "../../interfaces/internalModelAccess.js";
|
|
3
|
+
import { InternalModelScope } from "./InternalModelAccessFactory.js";
|
|
4
4
|
export interface AppModelAccessRecord {
|
|
5
5
|
id: string;
|
|
6
6
|
appName: string;
|
|
@@ -9,10 +9,26 @@ export interface AppModelAccessRecord {
|
|
|
9
9
|
export interface ModelRecord {
|
|
10
10
|
id: string;
|
|
11
11
|
name: string;
|
|
12
|
+
hostModelName: string;
|
|
13
|
+
primaryHostModel: boolean;
|
|
12
14
|
model: AbstractModel<any>;
|
|
13
15
|
ownerApp?: string;
|
|
14
16
|
enabled: boolean;
|
|
15
17
|
}
|
|
18
|
+
export interface ModelRegistrationOptions {
|
|
19
|
+
/** Physical ORM model name. It is intentionally independent from the Adminizer resource name. */
|
|
20
|
+
hostModelName?: string;
|
|
21
|
+
/**
|
|
22
|
+
* Selects this resource as the association target when multiple resources use the same host model.
|
|
23
|
+
* Exactly one resource must be primary for every shared host model.
|
|
24
|
+
*/
|
|
25
|
+
primary?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* @deprecated Register and use the canonical Adminizer resource name instead.
|
|
28
|
+
* Kept only for compatibility with existing integrations. Host model names must not be used as aliases.
|
|
29
|
+
*/
|
|
30
|
+
aliases?: string[];
|
|
31
|
+
}
|
|
16
32
|
export declare class AppModelAccess {
|
|
17
33
|
private readonly getModel;
|
|
18
34
|
private readonly appName;
|
|
@@ -33,9 +49,12 @@ export declare class AppModelAccess {
|
|
|
33
49
|
export declare class ModelHandler {
|
|
34
50
|
private models;
|
|
35
51
|
private modelAliases;
|
|
52
|
+
private hostModelResources;
|
|
36
53
|
private internalAccess?;
|
|
37
54
|
private appAccessRecords;
|
|
38
|
-
add<T>(
|
|
55
|
+
add<T>(resourceName: string, modelInstance: AbstractModel<T>, options?: ModelRegistrationOptions): void;
|
|
56
|
+
/** @deprecated Pass `{ aliases }` in ModelRegistrationOptions, or preferably use the canonical resource name. */
|
|
57
|
+
add<T>(resourceName: string, modelInstance: AbstractModel<T>, aliases?: string[]): void;
|
|
39
58
|
register<T>(appName: string, modelName: string, modelInstance: AbstractModel<T>): string;
|
|
40
59
|
unregister(id: string): void;
|
|
41
60
|
disable(id: string): void;
|
|
@@ -45,7 +64,10 @@ export declare class ModelHandler {
|
|
|
45
64
|
unregisterAppAccess(id: string): void;
|
|
46
65
|
getAppAccessRecords(appName: string): AppModelAccessRecord[];
|
|
47
66
|
createAppAccess(appName: string): AppModelAccess;
|
|
48
|
-
/**
|
|
67
|
+
/**
|
|
68
|
+
* Improved model getter with case-insensitive lookup and configured alias support.
|
|
69
|
+
* @deprecated New code should use getResource() and getByHostModel() explicitly.
|
|
70
|
+
*/
|
|
49
71
|
get model(): {
|
|
50
72
|
get: (modelName: string) => AbstractModel<any>;
|
|
51
73
|
has: (modelName: string) => boolean;
|
|
@@ -53,6 +75,26 @@ export declare class ModelHandler {
|
|
|
53
75
|
keys: () => IterableIterator<string>;
|
|
54
76
|
values: () => IterableIterator<AbstractModel<any>>;
|
|
55
77
|
};
|
|
78
|
+
/**
|
|
79
|
+
* Returns a model by its Adminizer resource name or an explicit deprecated compatibility alias.
|
|
80
|
+
* New code must use canonical resource names.
|
|
81
|
+
*/
|
|
82
|
+
getResource(resourceName: string): AbstractModel<any> | undefined;
|
|
83
|
+
getResourceRecord(resourceName: string): ModelRecord | undefined;
|
|
84
|
+
/**
|
|
85
|
+
* Resolves a physical ORM model name to its Adminizer resource.
|
|
86
|
+
* This lookup is deliberately separate from getResource(): a host model may have the
|
|
87
|
+
* same name as a system resource while being exposed under a project resource alias.
|
|
88
|
+
*/
|
|
89
|
+
resolveResourceByHostModel(hostModelName: string): string | undefined;
|
|
90
|
+
getByHostModel(hostModelName: string): AbstractModel<any> | undefined;
|
|
91
|
+
/**
|
|
92
|
+
* Resolves an ORM association target. Adapter-provided host model names take precedence;
|
|
93
|
+
* system-model relations may pass their explicit canonical resource name instead.
|
|
94
|
+
*/
|
|
95
|
+
resolveAssociationResource(targetName: string, resourceName?: string): string | undefined;
|
|
96
|
+
/** Validates that every host ORM model used by multiple resources has one primary resource. */
|
|
97
|
+
validateHostModelMappings(): void;
|
|
56
98
|
resolveModelName(modelName: string): string;
|
|
57
99
|
configureInternalAccess(accessMap?: InternalModelAccessMap): void;
|
|
58
100
|
internal(scopeName: string): InternalModelScope;
|
|
@@ -63,6 +105,9 @@ export declare class ModelHandler {
|
|
|
63
105
|
get all(): AbstractModel<any>[];
|
|
64
106
|
private getAllowedAppModels;
|
|
65
107
|
private registerAliases;
|
|
108
|
+
private registerHostModel;
|
|
109
|
+
private unregisterHostModel;
|
|
110
|
+
private getSharedHostModelError;
|
|
66
111
|
private resolveName;
|
|
67
112
|
private enabledModelEntries;
|
|
68
113
|
private enabledModelKeys;
|
|
@@ -40,18 +40,27 @@ export class AppModelAccess {
|
|
|
40
40
|
export class ModelHandler {
|
|
41
41
|
models = new Map();
|
|
42
42
|
modelAliases = new Map();
|
|
43
|
+
hostModelResources = new Map();
|
|
43
44
|
internalAccess;
|
|
44
45
|
appAccessRecords = new Map();
|
|
45
|
-
add(
|
|
46
|
-
const
|
|
47
|
-
this.models.
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
add(resourceName, modelInstance, options = {}) {
|
|
47
|
+
const resourceId = normalizeName(resourceName);
|
|
48
|
+
if (this.models.has(resourceId)) {
|
|
49
|
+
throw new Error(`Model resource "${resourceName}" is already registered`);
|
|
50
|
+
}
|
|
51
|
+
const normalizedOptions = Array.isArray(options) ? { aliases: options } : options;
|
|
52
|
+
const hostModelName = normalizedOptions.hostModelName ?? resourceName;
|
|
53
|
+
this.registerHostModel(resourceName, hostModelName, true);
|
|
54
|
+
this.models.set(resourceId, {
|
|
55
|
+
id: resourceId,
|
|
56
|
+
name: resourceName,
|
|
57
|
+
hostModelName,
|
|
58
|
+
primaryHostModel: normalizedOptions.primary === true,
|
|
50
59
|
model: modelInstance,
|
|
51
60
|
enabled: true,
|
|
52
61
|
});
|
|
53
|
-
this.registerAliases(
|
|
54
|
-
Adminizer.log.debug(`Model
|
|
62
|
+
this.registerAliases(resourceName, normalizedOptions.aliases ?? []);
|
|
63
|
+
Adminizer.log.debug(`Model resource [${resourceName}] was registered for host model [${hostModelName}]`);
|
|
55
64
|
}
|
|
56
65
|
register(appName, modelName, modelInstance) {
|
|
57
66
|
const normalizedModelName = normalizeName(modelName);
|
|
@@ -61,10 +70,13 @@ export class ModelHandler {
|
|
|
61
70
|
this.models.set(normalizedModelName, {
|
|
62
71
|
id: normalizedModelName,
|
|
63
72
|
name: modelName,
|
|
73
|
+
hostModelName: modelName,
|
|
74
|
+
primaryHostModel: true,
|
|
64
75
|
model: modelInstance,
|
|
65
76
|
ownerApp: appName,
|
|
66
77
|
enabled: true,
|
|
67
78
|
});
|
|
79
|
+
this.registerHostModel(modelName, modelName, false);
|
|
68
80
|
Adminizer.log.debug(`Model with name [${normalizedModelName}] was registered by app [${appName}]`);
|
|
69
81
|
return normalizedModelName;
|
|
70
82
|
}
|
|
@@ -74,6 +86,7 @@ export class ModelHandler {
|
|
|
74
86
|
return;
|
|
75
87
|
}
|
|
76
88
|
this.models.delete(normalizeName(id));
|
|
89
|
+
this.unregisterHostModel(record.hostModelName, record.name);
|
|
77
90
|
}
|
|
78
91
|
disable(id) {
|
|
79
92
|
const record = this.models.get(normalizeName(id));
|
|
@@ -118,7 +131,10 @@ export class ModelHandler {
|
|
|
118
131
|
return new AppModelAccess((modelName) => this.model.get(modelName), appName, () => this.getAllowedAppModels(appName));
|
|
119
132
|
}
|
|
120
133
|
// TODO: 'hot reload' need add method for delete model & unbind
|
|
121
|
-
/**
|
|
134
|
+
/**
|
|
135
|
+
* Improved model getter with case-insensitive lookup and configured alias support.
|
|
136
|
+
* @deprecated New code should use getResource() and getByHostModel() explicitly.
|
|
137
|
+
*/
|
|
122
138
|
get model() {
|
|
123
139
|
return {
|
|
124
140
|
get: (modelName) => this.models.get(this.resolveName(modelName))?.enabled
|
|
@@ -130,6 +146,65 @@ export class ModelHandler {
|
|
|
130
146
|
values: () => this.enabledModelValues(),
|
|
131
147
|
};
|
|
132
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Returns a model by its Adminizer resource name or an explicit deprecated compatibility alias.
|
|
151
|
+
* New code must use canonical resource names.
|
|
152
|
+
*/
|
|
153
|
+
getResource(resourceName) {
|
|
154
|
+
return this.model.get(resourceName);
|
|
155
|
+
}
|
|
156
|
+
getResourceRecord(resourceName) {
|
|
157
|
+
const record = this.models.get(this.resolveName(resourceName));
|
|
158
|
+
return record?.enabled ? record : undefined;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Resolves a physical ORM model name to its Adminizer resource.
|
|
162
|
+
* This lookup is deliberately separate from getResource(): a host model may have the
|
|
163
|
+
* same name as a system resource while being exposed under a project resource alias.
|
|
164
|
+
*/
|
|
165
|
+
resolveResourceByHostModel(hostModelName) {
|
|
166
|
+
const resourceIds = this.hostModelResources.get(normalizeName(hostModelName));
|
|
167
|
+
const records = Array.from(resourceIds ?? [])
|
|
168
|
+
.map((resourceId) => this.models.get(resourceId))
|
|
169
|
+
.filter((record) => Boolean(record?.enabled));
|
|
170
|
+
if (records.length === 1) {
|
|
171
|
+
return records[0].name;
|
|
172
|
+
}
|
|
173
|
+
const primaryRecords = records.filter((record) => record.primaryHostModel);
|
|
174
|
+
if (primaryRecords.length === 1) {
|
|
175
|
+
return primaryRecords[0].name;
|
|
176
|
+
}
|
|
177
|
+
if (records.length > 1) {
|
|
178
|
+
throw new Error(this.getSharedHostModelError(hostModelName, records));
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
getByHostModel(hostModelName) {
|
|
183
|
+
const resourceName = this.resolveResourceByHostModel(hostModelName);
|
|
184
|
+
return resourceName ? this.getResource(resourceName) : undefined;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Resolves an ORM association target. Adapter-provided host model names take precedence;
|
|
188
|
+
* system-model relations may pass their explicit canonical resource name instead.
|
|
189
|
+
*/
|
|
190
|
+
resolveAssociationResource(targetName, resourceName) {
|
|
191
|
+
if (resourceName) {
|
|
192
|
+
return this.getResourceRecord(resourceName)?.name;
|
|
193
|
+
}
|
|
194
|
+
return this.resolveResourceByHostModel(targetName)
|
|
195
|
+
?? this.getResourceRecord(targetName)?.name;
|
|
196
|
+
}
|
|
197
|
+
/** Validates that every host ORM model used by multiple resources has one primary resource. */
|
|
198
|
+
validateHostModelMappings() {
|
|
199
|
+
for (const [normalizedHostModelName, resourceIds] of this.hostModelResources) {
|
|
200
|
+
const records = Array.from(resourceIds)
|
|
201
|
+
.map((resourceId) => this.models.get(resourceId))
|
|
202
|
+
.filter((record) => Boolean(record?.enabled));
|
|
203
|
+
if (records.length > 1 && records.filter((record) => record.primaryHostModel).length !== 1) {
|
|
204
|
+
throw new Error(this.getSharedHostModelError(records[0]?.hostModelName ?? normalizedHostModelName, records));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
133
208
|
resolveModelName(modelName) {
|
|
134
209
|
const resolvedName = this.resolveName(modelName);
|
|
135
210
|
return this.models.get(resolvedName)?.name ?? modelName;
|
|
@@ -184,6 +259,30 @@ export class ModelHandler {
|
|
|
184
259
|
this.modelAliases.set(normalizedAlias, normalizedModelName);
|
|
185
260
|
}
|
|
186
261
|
}
|
|
262
|
+
registerHostModel(resourceName, hostModelName, allowMultipleResources) {
|
|
263
|
+
const normalizedHostModelName = normalizeName(hostModelName);
|
|
264
|
+
const resourceId = normalizeName(resourceName);
|
|
265
|
+
const resourceIds = this.hostModelResources.get(normalizedHostModelName) ?? new Set();
|
|
266
|
+
if (!allowMultipleResources && resourceIds.size && !resourceIds.has(resourceId)) {
|
|
267
|
+
const existingResourceId = resourceIds.values().next().value;
|
|
268
|
+
const existingResource = this.models.get(existingResourceId)?.name ?? existingResourceId;
|
|
269
|
+
throw new Error(`Host model "${hostModelName}" is already registered for Adminizer resource "${existingResource}"`);
|
|
270
|
+
}
|
|
271
|
+
resourceIds.add(resourceId);
|
|
272
|
+
this.hostModelResources.set(normalizedHostModelName, resourceIds);
|
|
273
|
+
}
|
|
274
|
+
unregisterHostModel(hostModelName, resourceName) {
|
|
275
|
+
const normalizedHostModelName = normalizeName(hostModelName);
|
|
276
|
+
const resourceIds = this.hostModelResources.get(normalizedHostModelName);
|
|
277
|
+
resourceIds?.delete(normalizeName(resourceName));
|
|
278
|
+
if (!resourceIds?.size) {
|
|
279
|
+
this.hostModelResources.delete(normalizedHostModelName);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
getSharedHostModelError(hostModelName, records) {
|
|
283
|
+
return (`Host model "${hostModelName}" is mapped to multiple Adminizer resources: ` +
|
|
284
|
+
`${records.map((record) => record.name).join(", ")}. Configure exactly one with primary: true.`);
|
|
285
|
+
}
|
|
187
286
|
resolveName(modelName) {
|
|
188
287
|
const normalizedModelName = normalizeName(modelName);
|
|
189
288
|
return this.modelAliases.get(normalizedModelName) ?? normalizedModelName;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AbstractAdapter, AbstractAdapterOptions, AbstractModel, Attribute } from "../AbstractModel";
|
|
3
|
-
import { QueryCriteria } from "../../../interfaces/queryCriteria";
|
|
1
|
+
import type { ModelStatic, Sequelize as SequelizeType } from "sequelize";
|
|
2
|
+
import { AbstractAdapter, AbstractAdapterOptions, AbstractModel, Attribute } from "../AbstractModel.js";
|
|
3
|
+
import { QueryCriteria } from "../../../interfaces/queryCriteria.js";
|
|
4
4
|
export declare function mapSequelizeToAdminizerAttributes(model: ModelStatic<any>): Record<string, Attribute>;
|
|
5
5
|
export declare class SequelizeModel<T> extends AbstractModel<T> {
|
|
6
6
|
private model;
|
|
7
|
+
private _init;
|
|
8
|
+
private _ensure;
|
|
7
9
|
constructor(modelName: string, model: ModelStatic<any>);
|
|
8
10
|
private _buildJsonContainsCondition;
|
|
9
11
|
_convertCriteriaToSequelize(criteria: any): any;
|
|
@@ -45,9 +47,9 @@ export declare class SequelizeModel<T> extends AbstractModel<T> {
|
|
|
45
47
|
private _buildCriteriaIncludes;
|
|
46
48
|
}
|
|
47
49
|
export declare class SequelizeAdapter extends AbstractAdapter {
|
|
48
|
-
sequelize:
|
|
50
|
+
sequelize: SequelizeType;
|
|
49
51
|
Model: typeof SequelizeModel;
|
|
50
|
-
constructor(sequelize:
|
|
52
|
+
constructor(sequelize: SequelizeType, options?: AbstractAdapterOptions);
|
|
51
53
|
get models(): Record<string, any>;
|
|
52
54
|
getModel(modelName: string): any;
|
|
53
55
|
getAttributes(modelName: string): any;
|