data-primals-engine 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +440 -0
  2. package/Dockerfile +19 -9
  3. package/DockerfileTest +19 -9
  4. package/README.md +58 -24
  5. package/client/package-lock.json +172 -1
  6. package/client/package.json +1 -0
  7. package/client/src/App.scss +4 -0
  8. package/client/src/CalendarConfigModal.jsx +60 -21
  9. package/client/src/CalendarView.jsx +107 -0
  10. package/client/src/CalendarView.scss +9 -0
  11. package/client/src/DataLayout.jsx +54 -27
  12. package/client/src/DataTable.jsx +19 -2
  13. package/client/src/Dialog.scss +4 -3
  14. package/client/src/Field.jsx +3 -2
  15. package/client/src/HistoryDialog.jsx +253 -0
  16. package/client/src/HistoryDialog.scss +320 -0
  17. package/client/src/ModelCreator.jsx +36 -15
  18. package/client/src/ModelCreatorField.jsx +5 -6
  19. package/client/src/ViewSwitcher.jsx +6 -6
  20. package/client/src/hooks/useTutorials.jsx +1 -1
  21. package/client/src/translations.js +298 -1
  22. package/package.json +2 -2
  23. package/src/email.js +1 -1
  24. package/src/engine.js +6 -6
  25. package/src/events.js +15 -5
  26. package/src/gameObject.js +0 -29
  27. package/src/modules/data/data.history.js +490 -0
  28. package/src/modules/data/data.js +139 -108
  29. package/src/modules/data/data.routes.js +4 -4
  30. package/src/modules/mongodb.js +17 -1
  31. package/src/modules/user.js +9 -3
  32. package/src/packs.js +2 -1
  33. package/src/services/stripe.js +67 -13
  34. package/src/workers/crypto-worker.js +3 -3
  35. package/test/data.backup.integration.test.js +5 -0
  36. package/test/data.history.integration.test.js +193 -0
  37. package/test/data.integration.test.js +79 -39
  38. package/test/events.test.js +27 -27
  39. package/test/globalTeardown.js +1 -0
  40. package/test/model.integration.test.js +5 -0
  41. package/test/workflow.actions.integration.test.js +2 -0
  42. package/test/workflow.integration.test.js +2 -0
  43. package/test/workflow.robustness.test.js +2 -0
@@ -2,6 +2,30 @@
2
2
  export const websiteTranslations = {
3
3
  fr: {
4
4
  translation: {
5
+ "modelcreator.field.history": "Permet d'afficher et de superviser les modifications effectuées sur vos données. Consomme de l'espace.'",
6
+ "history": "Historique",
7
+ "history.op.create": "Création",
8
+ "history.op.update": "Mise à jour",
9
+ "history.op.delete": "Suppression",
10
+ "history.datePrefix": "Le",
11
+ "history.byUser": "par",
12
+ "history.version": "Version :",
13
+ "history.error": "Impossible de charger l'historique.",
14
+ "history.title": "Historique de l'enregistrement",
15
+ "history.loading": "Chargement de l'historique...",
16
+ "history.noHistory": "Aucun historique trouvé pour cet enregistrement.",
17
+ "history.noChanges": "Aucune modification pertinente enregistrée.",
18
+ "history.noData": "Aucune donnée dans l'instantané.",
19
+ "history.previewAction": "Aperçu",
20
+ "history.previewTitle": "Aperçu de la révision",
21
+ "history.revertTooltip": "Restaure le document à cet état. Cela crée une nouvelle version.",
22
+ "history.revertAction": "Restaurer cette version",
23
+ "history.loadingPreview": "Chargement de l'aperçu...",
24
+ "history.selectRevision": "Sélectionnez une révision pour voir son état complet.",
25
+ "history.previewError": "Impossible de charger l'aperçu de la révision.",
26
+ "history.confirmRevert": "Êtes-vous sûr de vouloir revenir à la version {{version}} ? Cela créera une nouvelle version avec le contenu de cette révision.",
27
+ "history.revertSuccess": "Document restauré avec succès. L'historique va maintenant être mis à jour.",
28
+ "history.revertError": "Erreur lors de la restauration : {{error}}",
5
29
 
6
30
  "field_endpoint_isPublic": "Accès public",
7
31
  "field_endpoint_isPublic_hint": "Si coché, ce point d'accès sera accessible sans authentification. Le script s'exécutera avec les droits du propriétaire du point d'accès.",
@@ -51,6 +75,7 @@ export const websiteTranslations = {
51
75
  "dataview.calendar.notConfigured": "Votre interface n'est pas configurée pour la vue Calendrier. Choisissez un champ de type date/datetime pour positionner vos événements.",
52
76
  "dataview.kanban.notConfigured": "Votre interface n'est pas configurée pour la vue Kanban. Choisissez un champ pour grouper vos cartelettes Kanban, et un champ pour lister les sous-éléments array ou relation multiple.",
53
77
  "dataview.configure": "Configurer",
78
+ "views.configure": "Configurer la vue {{view}}",
54
79
  "dataview.calendar.configureTitle": "Configurer la vue Calendrier",
55
80
  "dataview.calendar.dateFieldLabel": "Champ pour la date de l'événement",
56
81
  "dataview.calendar.dateFieldPlaceholder": "Choisir un champ date...",
@@ -543,6 +568,31 @@ export const websiteTranslations = {
543
568
  },
544
569
  en: {
545
570
  translation: {
571
+ "modelcreator.field.history": "Allows you to view and monitor changes made to your data. Consumes space.",
572
+ "history": "History",
573
+ "history.op.create": "Creation",
574
+ "history.op.update": "Update",
575
+ "history.op.delete": "Deletion",
576
+ "history.datePrefix": "On",
577
+ "history.byUser": "by",
578
+ "history.version": "Version:",
579
+ "history.error": "Unable to load history.",
580
+ "history.title": "Record History",
581
+ "history.loading": "Loading history...",
582
+ "history.noHistory": "No history found for this record.",
583
+ "history.noChanges": "No relevant changes recorded.",
584
+ "history.noData": "No data in snapshot.",
585
+ "history.previewAction": "Preview",
586
+ "history.previewTitle": "Revision Preview",
587
+ "history.revertTooltip": "Revert the document to this state. This creates a new version.",
588
+ "history.revertAction": "Revert to this version",
589
+ "history.loadingPreview": "Loading preview...",
590
+ "history.selectRevision": "Select a revision to preview its full state.",
591
+ "history.previewError": "Could not load revision preview.",
592
+ "history.confirmRevert": "Are you sure you want to revert to version {{version}}? This will create a new version with the content of this revision.",
593
+ "history.revertSuccess": "Document successfully reverted. The history will now be updated.",
594
+ "history.revertError": "Error reverting: {{error}}",
595
+
546
596
  "packs.manualInstall": "Import",
547
597
  "packs.manualInstall.title": "Manual Pack Installation",
548
598
  "packs.manualInstall.instructions": "Paste the configuration JSON of the pack you want to install here.",
@@ -603,6 +653,7 @@ export const websiteTranslations = {
603
653
  "dataview.calendar.notConfigured": "Your interface is not configured for the Calendar view. Choose a date/datetime field to position your events.",
604
654
  "dataview.kanban.notConfigured": "Your interface is not configured for the Kanban view. Choose a field to group your Kanban cards, and a field to list the array or multiple relationship sub-elements.",
605
655
  "dataview.configure": "Configure",
656
+ "views.configure": "Configure {{view}} view",
606
657
  "dataview.calendar.configureTitle": "Configure the Calendar view",
607
658
  "dataview.calendar.dateFieldLabel": "Field for the event date",
608
659
  "dataview.calendar.dateFieldPlaceholder": "Choose a date field...",
@@ -1957,6 +2008,30 @@ export const websiteTranslations = {
1957
2008
  },
1958
2009
  es: {
1959
2010
  translation: {
2011
+ "modelcreator.field.history": "Permite ver y supervisar los cambios realizados en los datos. Consume espacio.",
2012
+ "history": "Historial",
2013
+ "history.op.create": "Creación",
2014
+ "history.op.update": "Actualizar",
2015
+ "history.op.delete": "Eliminar",
2016
+ "history.datePrefix": "Activado",
2017
+ "history.byUser": "Por",
2018
+ "history.version": "Versión:",
2019
+ "history.error": "No se puede cargar el historial.",
2020
+ "history.title": "Historial del registro",
2021
+ "history.loading": "Cargando historial...",
2022
+ "history.noHistory": "No se encontró historial para este registro.",
2023
+ "history.noChanges": "No se registraron cambios relevantes.",
2024
+ "history.noData": "No hay datos en la instantánea.",
2025
+ "history.previewAction": "Vista previa",
2026
+ "history.previewTitle": "Vista previa de la revisión",
2027
+ "history.revertTooltip": "Restaura el documento a este estado. Esto crea una nueva versión.",
2028
+ "history.revertAction": "Revertir esto versión",
2029
+ "history.loadingPreview": "Cargando vista previa...",
2030
+ "history.selectRevision": "Seleccione una revisión para ver su estado completo.",
2031
+ "history.previewError": "No se puede cargar la vista previa de la revisión.",
2032
+ "history.confirmRevert": "¿Está seguro de que desea volver a la versión {{version}}? Esto creará una nueva versión con el contenido de esta revisión.",
2033
+ "history.revertSuccess": "El documento se restauró correctamente. El historial se actualizará.",
2034
+ "history.revertError": "Error al restaurar: {{error}}",
1960
2035
  "packs.manualInstall": "Importar",
1961
2036
  "packs.manualInstall.title": "Instalación manual del paquete",
1962
2037
  "packs.manualInstall.instructions": "Pegue aquí el JSON de configuración del paquete que desea instalar.",
@@ -3375,6 +3450,30 @@ export const websiteTranslations = {
3375
3450
  },
3376
3451
  pt: {
3377
3452
  translation: {
3453
+ "modelcreator.field.history": "Permite visualizar e monitorar as alterações feitas nos seus dados. Consome espaço.",
3454
+ "history": "Histórico",
3455
+ "history.op.create": "Criação",
3456
+ "history.op.update": "Atualização",
3457
+ "history.op.delete": "Exclusão",
3458
+ "history.datePrefix": "Ativado",
3459
+ "history.byUser": "Por",
3460
+ "history.version": "Versão:",
3461
+ "history.error": "Não foi possível carregar o histórico.",
3462
+ "history.title": "Histórico do Registro",
3463
+ "history.loading": "Carregando histórico...",
3464
+ "history.noHistory": "Nenhum histórico encontrado para este registro.",
3465
+ "history.noChanges": "Nenhuma alteração relevante registrada.",
3466
+ "history.noData": "Nenhum dado no snapshot.",
3467
+ "history.previewAction": "Visualizar",
3468
+ "history.previewTitle": "Visualizar Revisão",
3469
+ "history.revertTooltip": "Restaura o documento para este status. Isso cria um novo versão.",
3470
+ "history.revertAction": "Reverter esta versão",
3471
+ "history.loadingPreview": "Carregando visualização...",
3472
+ "history.selectRevision": "Selecione uma revisão para ver seu status completo.",
3473
+ "history.previewError": "Não foi possível carregar a visualização da revisão.",
3474
+ "history.confirmRevert": "Tem certeza de que deseja reverter para a versão {{version}}? Isso criará uma nova versão com o conteúdo desta revisão.",
3475
+ "history.revertSuccess": "Documento restaurado com sucesso. O histórico agora será atualizado.",
3476
+ "history.revertError": "Erro ao restaurar: {{error}}",
3378
3477
  "packs.manualInstall": "Importar",
3379
3478
  "packs.manualInstall.title": "Instalação manual do pacote",
3380
3479
  "packs.manualInstall.instructions": "Cole o JSON de configuração do pacote que você deseja instalar aqui.",
@@ -4788,6 +4887,32 @@ export const websiteTranslations = {
4788
4887
  },
4789
4888
  de: {
4790
4889
  translation: {
4890
+ "modelcreator.field.history": "Ermöglicht Ihnen, Änderungen an Ihren Daten anzuzeigen und zu überwachen. Verbraucht Speicherplatz.",
4891
+ "history": "Verlauf",
4892
+
4893
+ "history.op.create": "Erstellung",
4894
+ "history.op.update": "Aktualisieren",
4895
+ "history.op.delete": "Löschen",
4896
+ "history.datePrefix": "Am",
4897
+ "history.byUser": "Von",
4898
+ "history.version": "Version:",
4899
+ "history.error": "Verlauf konnte nicht geladen werden.",
4900
+ "history.title": "Datensatzverlauf",
4901
+ "history.loading": "Verlauf wird geladen...",
4902
+ "history.noHistory": "Für diesen Datensatz wurde kein Verlauf gefunden.",
4903
+ "history.noChanges": "Keine relevanten Änderungen erfasst.",
4904
+ "history.noData": "Keine Daten im Snapshot.",
4905
+ "history.previewAction": "Vorschau",
4906
+ "history.previewTitle": "Revisionsvorschau",
4907
+ "history.revertTooltip": "Stellt den aktuellen Status des Dokuments wieder her. Dadurch wird eine neue Version erstellt.",
4908
+ "history.revertAction": "Diese Version zurücksetzen",
4909
+ "history.loadingPreview": "Vorschau wird geladen…",
4910
+ "history.selectRevision": "Wählen Sie eine Revision aus, um ihren vollständigen Status anzuzeigen.",
4911
+ "history.previewError": "Die Revisionsvorschau konnte nicht geladen werden.",
4912
+ "history.confirmRevert": "Möchten Sie wirklich zu Version {{version}} zurückkehren? Dadurch wird eine neue Version mit dem Inhalt dieser Revision erstellt.",
4913
+ "history.revertSuccess": "Dokument erfolgreich wiederhergestellt. Der Verlauf wird nun aktualisiert.",
4914
+ "history.revertError": "Fehler beim Wiederherstellen: {{error}}",
4915
+
4791
4916
  "packs.manualInstall": "Importieren",
4792
4917
  "packs.manualInstall.title": "Manuelle Paketinstallation",
4793
4918
  "packs.manualInstall.instructions": "Fügen Sie hier die JSON-Konfiguration des zu installierenden Pakets ein.",
@@ -6185,6 +6310,31 @@ export const websiteTranslations = {
6185
6310
  },
6186
6311
  it: {
6187
6312
  translation: {
6313
+ "modelcreator.field.history": "Consente di visualizzare e monitorare le modifiche apportate ai dati. Occupa spazio.",
6314
+ "history": "Cronologia",
6315
+
6316
+ "history.op.create": "Creazione",
6317
+ "history.op.update": "Aggiorna",
6318
+ "history.op.delete": "Eliminazione",
6319
+ "history.datePrefix": "Attivato",
6320
+ "history.byUser": "Da",
6321
+ "history.version": "Versione:",
6322
+ "history.error": "Impossibile caricare la cronologia.",
6323
+ "history.title": "Cronologia del record",
6324
+ "history.loading": "Caricamento della cronologia...",
6325
+ "history.noHistory": "Nessuna cronologia trovata per questo record.",
6326
+ "history.noChanges": "Nessuna modifica rilevante registrata.",
6327
+ "history.noData": "Nessun dato nello snapshot.",
6328
+ "history.previewAction": "Anteprima",
6329
+ "history.previewTitle": "Anteprima revisione",
6330
+ "history.revertTooltip": "Ripristina il documento a questo stato. Crea una nuova versione.",
6331
+ "history.revertAction": "Ripristina questo stato version",
6332
+ "history.loadingPreview": "Caricamento anteprima...",
6333
+ "history.selectRevision": "Seleziona una revisione per visualizzarne lo stato completo.",
6334
+ "history.previewError": "Impossibile caricare l'anteprima della revisione.",
6335
+ "history.confirmRevert": "Vuoi davvero tornare alla versione {{version}}? Verrà creata una nuova versione con il contenuto di questa revisione.",
6336
+ "history.revertSuccess": "Documento ripristinato correttamente. La cronologia verrà aggiornata.",
6337
+ "history.revertError": "Errore durante il ripristino: {{error}}",
6188
6338
  "packs.manualInstall": "Importa",
6189
6339
  "packs.manualInstall.title": "Installazione manuale del pacchetto",
6190
6340
  "packs.manualInstall.instructions": "Incolla qui il file JSON di configurazione del pacchetto che desideri installare.",
@@ -7595,6 +7745,30 @@ export const websiteTranslations = {
7595
7745
  },
7596
7746
  cs: {
7597
7747
  translation: {
7748
+ "modelcreator.field.history": "Umožňuje zobrazit a sledovat změny provedené ve vašich datech. Spotřebovává místo.",
7749
+ "history": "Historie",
7750
+ "history.op.create": "Vytvoření",
7751
+ "history.op.update": "Aktualizace",
7752
+ "history.op.delete": "Smazání",
7753
+ "history.datePrefix": "Zapnuto",
7754
+ "history.byUser": "Od",
7755
+ "history.version": "Verze:",
7756
+ "history.error": "Nelze načíst historii.",
7757
+ "history.title": "Historie záznamu",
7758
+ "history.loading": "Načítání historie...",
7759
+ "history.noHistory": "Pro tento záznam nebyla nalezena žádná historie.",
7760
+ "history.noChanges": "Žádné relevantní změny nebyly zaznamenány.",
7761
+ "history.noData": "V snímku nejsou žádná data.",
7762
+ "history.previewAction": "Náhled",
7763
+ "history.previewTitle": "Náhled revize",
7764
+ "history.revertTooltip": "Obnoví dokument do tohoto stavu. Tím se vytvoří nová verze.",
7765
+ "history.revertAction": "Vrátit zpět verze",
7766
+ "history.loadingPreview": "Načítání náhledu...",
7767
+ "history.selectRevision": "Vyberte revizi pro zobrazení jejího úplného stavu.",
7768
+ "history.previewError": "Nelze načíst náhled revize.",
7769
+ "history.confirmRevert": "Jste si jisti, že se chcete vrátit k verzi {{version}}? Tímto se vytvoří nová verze s obsahem této revize.",
7770
+ "history.revertSuccess": "Dokument byl úspěšně obnoven. Historie bude nyní aktualizována.",
7771
+ "history.revertError": "Chyba při obnovování: {{error}}",
7598
7772
  "packs.manualInstall": "Importovat",
7599
7773
  "packs.manualInstall.title": "Ruční instalace balíčku",
7600
7774
  "packs.manualInstall.instructions": "Sem vložte konfigurační JSON balíčku, který chcete nainstalovat.",
@@ -9000,6 +9174,32 @@ export const websiteTranslations = {
9000
9174
  },
9001
9175
  ru: {
9002
9176
  translation: {
9177
+ "modelcreator.field.history": "Позволяет просматривать и отслеживать изменения, внесённые в ваши данные. Занимает место.",
9178
+ "history": "История",
9179
+
9180
+ "history.op.create": "Создание",
9181
+ "history.op.update": "Обновление",
9182
+ "history.op.delete": "Удаление",
9183
+ "history.datePrefix": "Вкл",
9184
+ "history.byUser": "Автор",
9185
+ "history.version": "Версия:",
9186
+ "history.error": "Не удалось загрузить историю.",
9187
+ "history.title": "История записи",
9188
+ "history.loading": "Загрузка истории...",
9189
+ "history.noHistory": "История для этой записи не найдена.",
9190
+ "history.noChanges": "Соответствующие изменения не зарегистрированы.",
9191
+ "history.noData": "Данные в снимке отсутствуют.",
9192
+ "history.previewAction": "Предварительный просмотр",
9193
+ "history.previewTitle": "Предварительный просмотр версии",
9194
+ "history.revertTooltip": "Восстанавливает документ до этой версии",
9195
+ "history.revertAction": "Вернуть эту версию",
9196
+ "history.loadingPreview": "Загрузка предварительного просмотра...",
9197
+ "history.selectRevision": "Выберите версию, чтобы увидеть её полный статус.",
9198
+ "history.previewError": "Не удалось загрузить предварительный просмотр версии.",
9199
+ "history.confirmRevert": "Вы уверены, что хотите вернуться к версии {{version}}? Будет создана новая версия с содержимым этой версии.",
9200
+ "history.revertSuccess": "Документ успешно восстановлен. История будет обновлена.",
9201
+ "history.revertError": "Ошибка восстановления: {{error}}",
9202
+
9003
9203
  "packs.manualInstall": "Импорт",
9004
9204
  "packs.manualInstall.title": "Ручная установка пакета",
9005
9205
  "packs.manualInstall.instructions": "Вставьте сюда JSON-файл конфигурации пакета, который вы хотите установить.",
@@ -10415,6 +10615,31 @@ export const websiteTranslations = {
10415
10615
  },
10416
10616
  ar: {
10417
10617
  translation: {
10618
+ "modelcreator.field.history": "يسمح لك بعرض ومراقبة التغييرات التي أجريتها على بياناتك. يستهلك مساحة.",
10619
+ "history": "السجل",
10620
+ "history.op.create": "إنشاء",
10621
+ "history.op.update": "تحديث",
10622
+ "history.op.delete": "حذف",
10623
+ "history.datePrefix": "تشغيل",
10624
+ "history.byUser": "بواسطة",
10625
+ "history.version": "الإصدار:",
10626
+ "history.error": "تعذر تحميل السجل",
10627
+ "history.title": "سجل السجل",
10628
+ "history.loading": "جارٍ تحميل السجل...",
10629
+ "history.noHistory": "لم يتم العثور على سجل لهذا السجل",
10630
+ "history.noChanges": "لم يتم تسجيل أي تغييرات ذات صلة",
10631
+ "history.noData": "لا توجد بيانات في اللقطة",
10632
+ "history.previewAction": "معاينة",
10633
+ "history.previewTitle": "معاينة المراجعة",
10634
+ "history.revertTooltip": "يعيد المستند إلى هذه الحالة. يؤدي هذا إلى إنشاء ملف جديد الإصدار.",
10635
+ "history.revertAction": "استعادة هذا الإصدار",
10636
+ "history.loadingPreview": "جاري تحميل المعاينة...",
10637
+ "history.selectRevision": "حدد مراجعة للاطلاع على حالتها الكاملة.",
10638
+ "history.previewError": "تعذر تحميل معاينة المراجعة.",
10639
+ "history.confirmRevert": "هل أنت متأكد من رغبتك في العودة إلى الإصدار {{version}}؟ سيؤدي هذا إلى إنشاء إصدار جديد بمحتويات هذه المراجعة.",
10640
+ "history.revertSuccess": "تمت استعادة المستند بنجاح. سيتم الآن تحديث السجل.",
10641
+ "history.revertError": "خطأ في الاستعادة: {{error}}",
10642
+
10418
10643
  "packs.manualInstall": "استيراد",
10419
10644
  "packs.manualInstall.title": "تثبيت الحزمة يدويًا",
10420
10645
  "packs.manualInstall.instructions": "الصق ملف JSON الخاص بتكوين الحزمة التي تريد تثبيتها هنا",
@@ -11846,6 +12071,30 @@ export const websiteTranslations = {
11846
12071
  },
11847
12072
  sv: {
11848
12073
  translation: {
12074
+ "modelcreator.field.history": "Låter dig visa och övervaka ändringar som gjorts i dina data. Tar plats.",
12075
+ "history": "Historik",
12076
+ "history.op.create": "Skapande",
12077
+ "history.op.update": "Uppdatering",
12078
+ "history.op.delete": "Bortning",
12079
+ "history.datePrefix": "På",
12080
+ "history.byUser": "Av",
12081
+ "history.version": "Version:",
12082
+ "history.error": "Det gick inte att läsa in historiken.",
12083
+ "history.title": "Posthistorik",
12084
+ "history.loading": "Laddar in historik...",
12085
+ "history.noHistory": "Ingen historik hittades för den här posten.",
12086
+ "history.noChanges": "Inga relevanta ändringar registrerade.",
12087
+ "history.noData": "Inga data i ögonblicksbilden.",
12088
+ "history.previewAction": "Förhandsgranska",
12089
+ "history.previewTitle": "Förhandsgranska version",
12090
+ "history.revertTooltip": "Återställer dokumentet till denna status. Detta skapar en ny version.",
12091
+ "history.revertAction": "Återställ den här versionen",
12092
+ "history.loadingPreview": "Laddar in förhandsgranskning...",
12093
+ "history.selectRevision": "Välj en revision för att se dess fullständiga status.",
12094
+ "history.previewError": "Det gick inte att ladda förhandsgranskningen av revisionen.",
12095
+ "history.confirmRevert": "Är du säker på att du vill återgå till version {{version}}? Detta skapar en ny version med innehållet i denna revision.",
12096
+ "history.revertSuccess": "Dokumentet har återställts. Historiken kommer nu att uppdateras.",
12097
+ "history.revertError": "Fel vid återställning: {{error}}",
11849
12098
  "packs.manualInstall": "Importera",
11850
12099
  "packs.manualInstall.title": "Manuell paketinstallation",
11851
12100
  "packs.manualInstall.instructions": "Klistra in konfigurations-JSON-filen för paketet du vill installera här.",
@@ -13251,6 +13500,31 @@ export const websiteTranslations = {
13251
13500
  },
13252
13501
  el: {
13253
13502
  translation: {
13503
+ "modelcreator.field.history": "Σας επιτρέπει να βλέπετε και να παρακολουθείτε τις αλλαγές που έγιναν στα δεδομένα σας. Καταλαμβάνει χώρο.",
13504
+ "history": "Ιστορικό",
13505
+ "history.op.create": "Δημιουργία",
13506
+ "history.op.update": "Ενημέρωση",
13507
+ "history.op.delete": "Διαγραφή",
13508
+ "history.datePrefix": "Ενεργοποίηση",
13509
+ "history.byUser": "Από",
13510
+ "history.version": "Έκδοση:",
13511
+ "history.error": "Δεν είναι δυνατή η φόρτωση του ιστορικού.",
13512
+ "history.title": "Ιστορικό εγγραφών",
13513
+ "history.loading": "Φόρτωση ιστορικού...",
13514
+ "history.noHistory": "Δεν βρέθηκε ιστορικό για αυτήν την εγγραφή.",
13515
+ "history.noChanges": "Δεν έχουν καταγραφεί σχετικές αλλαγές.",
13516
+ "history.noData": "Δεν υπάρχουν δεδομένα στο στιγμιότυπο.",
13517
+ "history.previewAction": "Προεπισκόπηση",
13518
+ "history.previewTitle": "Προεπισκόπηση αναθεώρησης",
13519
+ "history.revertTooltip": "Επαναφέρει το έγγραφο σε αυτήν την κατάσταση. Αυτό δημιουργεί μια νέα έκδοση.",
13520
+ "history.revertAction": "Επαναφορά αυτής της έκδοσης",
13521
+
13522
+ "history.loadingPreview": "Φόρτωση προεπισκόπηση...",
13523
+ "history.selectRevision": "Επιλέξτε μια αναθεώρηση για να δείτε την πλήρη κατάστασή της.",
13524
+ "history.previewError": "Δεν είναι δυνατή η φόρτωση της προεπισκόπησης αναθεώρησης.",
13525
+ "history.confirmRevert": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε την έκδοση {{version}}; Αυτό θα δημιουργήσει μια νέα έκδοση με τα περιεχόμενα αυτής της αναθεώρησης.",
13526
+ "history.revertSuccess": "Η επαναφορά του εγγράφου ολοκληρώθηκε με επιτυχία. Το ιστορικό θα ενημερωθεί τώρα.",
13527
+ "history.revertError": "Σφάλμα επαναφοράς: {{error}}",
13254
13528
  "packs.manualInstall": "Εισαγωγή",
13255
13529
  "packs.manualInstall.title": "Χειροκίνητη εγκατάσταση πακέτου",
13256
13530
  "packs.manualInstall.instructions": "Επικολλήστε εδώ το JSON διαμόρφωσης του πακέτου που θέλετε να εγκαταστήσετε.",
@@ -14664,7 +14938,30 @@ export const websiteTranslations = {
14664
14938
  },
14665
14939
  fa: {
14666
14940
  "translation": {
14667
-
14941
+ "modelcreator.field.history": "به شما امکان می‌دهد تغییرات ایجاد شده در داده‌های خود را مشاهده و نظارت کنید. فضا مصرف می‌کند.",
14942
+ "history": "تاریخچه",
14943
+ "history.op.create": "ایجاد",
14944
+ "history.op.update": "به‌روزرسانی",
14945
+ "history.op.delete": "حذف",
14946
+ "history.datePrefix": "روشن",
14947
+ "history.byUser": "توسط",
14948
+ "history.version": "نسخه:",
14949
+ "history.error": "بارگیری تاریخچه امکان‌پذیر نیست.",
14950
+ "history.title": "تاریخچه رکورد",
14951
+ "history.loading": "در حال بارگذاری تاریخچه...",
14952
+ "history.noHistory": "هیچ تاریخچه‌ای برای این رکورد یافت نشد.",
14953
+ "history.noChanges": "هیچ تغییر مرتبطی ثبت نشده است.",
14954
+ "history.noData": "داده‌ای در تصویر لحظه‌ای وجود ندارد.",
14955
+ "history.previewAction": "پیش‌نمایش",
14956
+ "history.previewTitle": "پیش‌نمایش ویرایش",
14957
+ "history.revertTooltip": "سند را به این وضعیت بازیابی می‌کند. این یک نسخه جدید.",
14958
+ "history.revertAction": "این نسخه را برگردانید",
14959
+ "history.loadingPreview": "در حال بارگذاری پیش‌نمایش...",
14960
+ "history.selectRevision": "برای مشاهده وضعیت کامل یک نسخه، آن را انتخاب کنید.",
14961
+ "history.previewError": "قادر به بارگذاری پیش‌نمایش نسخه نیست.",
14962
+ "history.confirmRevert": "آیا مطمئنید که می‌خواهید به نسخه {{version}} برگردید؟ این کار یک نسخه جدید با محتوای این نسخه ایجاد می‌کند.",
14963
+ "history.revertSuccess": "سند با موفقیت بازیابی شد. تاریخچه اکنون به‌روزرسانی خواهد شد.",
14964
+ "history.revertError": "خطا در بازیابی: {{error}}",
14668
14965
  "packs.manualInstall": "وارد کردن",
14669
14966
  "packs.manualInstall.title": "نصب دستی بسته",
14670
14967
  "packs.manualInstall.instructions": "فایل JSON پیکربندی بسته‌ای که می‌خواهید نصب کنید را اینجا جای‌گذاری کنید.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "data-primals-engine",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "data-primals-engine is a package responsible from handling large amount of data using MongoDB in a practical and performant way. It can also get workflow models working (for automation), and fully supports internationalisation. It also has integrated AI assistant.",
5
5
  "main": "src/engine.js",
6
6
  "type": "module",
@@ -16,7 +16,7 @@
16
16
  "lint": "eslint .",
17
17
  "format": "prettier --write .",
18
18
  "clean": "rm -rf node_modules package-lock.json",
19
- "test": "cross-env MONGO_DB_URL=\"mongodb://localhost:27017\" PORT=7635 vitest --no-file-parallelism",
19
+ "test": "cross-env MONGO_DB_URL=\"mongodb://localhost:27017\" PORT=7635 vitest --no-file-parallelism --no-watch",
20
20
  "audit": "npm audit --audit-level=high",
21
21
  "migrate:create": "node src/migrate.js create",
22
22
  "migrate:up": "node src/migrate.js up",
package/src/email.js CHANGED
@@ -54,7 +54,7 @@ export const sendEmail = async (email = "", data, smtpConfig = null, lang, tpl =
54
54
 
55
55
  Event.Listen("OnEmailTemplate", (data, lang) => data.content, "event", "system");
56
56
 
57
- if (tpl === null) tpl = Event.Trigger("OnEmailTemplate", "event", "system", data, lang);
57
+ if (tpl === null) tpl = await Event.Trigger("OnEmailTemplate", "event", "system", data, lang);
58
58
  let html = tpl;
59
59
  try {
60
60
  html = juice(tpl);
package/src/engine.js CHANGED
@@ -198,7 +198,7 @@ export const Engine = {
198
198
  logger.warn(`Aucun point d'entrée trouvé pour le module '${moduleIdentifier}'.`);
199
199
  }
200
200
  } catch (e) {
201
- logger.error(`Échec du chargement du module '${moduleIdentifier}':`, e.stack);
201
+ logger.error(`Could not load module '${moduleIdentifier}':`, e.stack);
202
202
  }
203
203
  }
204
204
 
@@ -246,12 +246,12 @@ export const Engine = {
246
246
  process.exit(1);
247
247
  });
248
248
 
249
- Event.Trigger("OnServerStart", "event", "system", engine);
249
+ await Event.Trigger("OnServerStart", "event", "system", engine);
250
250
  }
251
251
 
252
252
  engine.stop = async () => {
253
253
  await server.close();
254
- Event.Trigger("OnServerStop", "event", "system", engine);
254
+ await Event.Trigger("OnServerStop", "event", "system", engine);
255
255
  };
256
256
 
257
257
  async function setupInitialModels() {
@@ -262,7 +262,7 @@ export const Engine = {
262
262
 
263
263
  for(let i = 0; i < ms.length; ++i){
264
264
  const model = ms[i];
265
- validateModelStructure(model);
265
+ await validateModelStructure(model);
266
266
  // Création des modèles
267
267
  if( !dbModels.find(m =>m.name === model.name) )
268
268
  {
@@ -274,11 +274,11 @@ export const Engine = {
274
274
  logger.info('Model loaded (' + model.name + ')');
275
275
  }
276
276
  logger.info("All models loaded.");
277
- Event.Trigger("OnModelsLoaded", "event", "system", engine, dbModels);
277
+ await Event.Trigger("OnModelsLoaded", "event", "system", engine, dbModels);
278
278
  }
279
279
  engine.resetModels = async () => {
280
280
  await deleteModels();
281
- Event.Trigger("OnModelsDeleted", "event", "system", engine);
281
+ await Event.Trigger("OnModelsDeleted", "event", "system", engine);
282
282
  };
283
283
  return engine;
284
284
  }
package/src/events.js CHANGED
@@ -12,14 +12,20 @@ const eventLayerSystems = {
12
12
 
13
13
 
14
14
  export const Event = {
15
- Trigger: (name, system = "priority", layer = "medium", ...args) => { // Ajout des arguments system et layer
15
+ Trigger: async (name, system = "priority", layer = "medium", ...args) => { // Ajout des arguments system et layer
16
+ if (!name || typeof name !== 'string') {
17
+ throw new Error('Event name must be a non-empty string');
18
+ }
19
+
16
20
  if (!events[system] || !events[system][name] || (layer && !events[system][name][layer])) {
17
21
  //console.warn(`No trigger found for ${name} in system ${system} layer ${layer}`);
18
22
  return null;
19
23
  }
20
24
 
21
25
  const systemsToProcess = system ? [system] : Object.keys(events); // Si system est spécifié, on cible ce système uniquement, sinon tous les systèmes
22
-
26
+ console.log(`[Event] Triggering ${system}.${layer}.${name}`, {
27
+ callbacks: events[system]?.[name]?.[layer]?.length || 0
28
+ });
23
29
  let ret = null;
24
30
  for (const currentSystem of systemsToProcess) {
25
31
  if (events[currentSystem] && events[currentSystem][name]) {
@@ -30,12 +36,12 @@ export const Event = {
30
36
  if (events[currentSystem][name][currentLayer]) {
31
37
  for (const callback of events[currentSystem][name][currentLayer]) {
32
38
  try {
33
- const res = callback(...args);
39
+ const res = await callback(...args);
34
40
  if (typeof res === "object" && !Array.isArray(res)) {
35
41
  if (typeof ret !== "object") ret = {};
36
42
  ret = {...ret, ...res};
37
43
  } else if (Array.isArray(res)) {
38
- if (!Array.isArray(ret)) ret = [];
44
+ if (!ret || !Array.isArray(ret)) ret = [];
39
45
  ret = ret.concat(res);
40
46
  } else if (typeof res === "string") {
41
47
  if (typeof ret !== "string") ret = "";
@@ -50,7 +56,11 @@ export const Event = {
50
56
  ret = res || ret;
51
57
  }
52
58
  } catch (error) {
53
- console.error(`Error in callback for event ${name} in system ${currentSystem} layer ${currentLayer}:`, error);
59
+ const errorMsg = `Error in callback for event ${name} in system ${currentSystem} layer ${currentLayer}: ${error.message}`;
60
+ const newError = new Error(errorMsg);
61
+ newError.originalError = error; // Conserve l'erreur originale
62
+ newError.eventDetails = { name, system: currentSystem, layer: currentLayer };
63
+ throw newError;
54
64
  }
55
65
  }
56
66
  }
package/src/gameObject.js CHANGED
@@ -61,35 +61,6 @@ export class MovableBehaviour extends Behaviour {
61
61
  this.gameObject.x += this.speed;
62
62
  }
63
63
  }
64
-
65
- // UsableBehavior.js
66
- export class UsableBehaviour extends Behaviour {
67
- constructor(gameObject) {
68
- super(gameObject);
69
- }
70
-
71
- use() {
72
- Event.Trigger("GameObject.UsableBehavior.use", "system", "calls", this);
73
- }
74
- }
75
-
76
- const mainDriver = GameObject.Create("MainDrivers");
77
-
78
- // Exemple d'attachement de comportements
79
- mainDriver.addComponent(MovableBehaviour, 10);
80
- mainDriver.addComponent(UsableBehaviour);
81
-
82
- // Accéder et utiliser les composants
83
- const movable = mainDriver.getComponent(MovableBehaviour);
84
- if (movable) {
85
- movable.update();
86
- }
87
- const usable = mainDriver.getComponent(UsableBehaviour);
88
- if (usable) {
89
- usable.use();
90
- }
91
-
92
-
93
64
  export class Logger extends Behaviour {
94
65
  constructor(gameObject) {
95
66
  super(gameObject);