iobroker.telegram-menu 2.4.2 → 2.4.4
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/README.md +12 -0
- package/admin/build/index.js +68 -68
- package/admin/build/index.js.map +3 -3
- package/admin/css/style.css +7 -0
- package/admin/i18n/de/translations.json +1 -1
- package/admin/i18n/en/translations.json +1 -1
- package/admin/words.js +3 -3
- package/build/app/dynamicValue.js +12 -11
- package/build/app/dynamicValue.js.map +2 -2
- package/build/app/processData.js +10 -10
- package/build/app/processData.js.map +2 -2
- package/build/app/setstate.js +7 -1
- package/build/app/setstate.js.map +3 -3
- package/build/app/status.js +54 -0
- package/build/app/status.js.map +7 -0
- package/build/lib/exchangeValue.js +2 -2
- package/build/lib/exchangeValue.js.map +2 -2
- package/build/lib/string.js +2 -2
- package/build/lib/string.js.map +2 -2
- package/build/lib/utilities.js +3 -29
- package/build/lib/utilities.js.map +2 -2
- package/build/main.js +18 -4
- package/build/main.js.map +2 -2
- package/build/types/types.js.map +1 -1
- package/io-package.json +27 -27
- package/package.json +5 -5
package/admin/css/style.css
CHANGED
|
@@ -289,9 +289,16 @@ div.MuiTabPanel-root {
|
|
|
289
289
|
justify-content: center;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
+
.rename__card label {
|
|
293
|
+
margin-top: 1rem !important;
|
|
294
|
+
width: 100% !important;
|
|
295
|
+
display: flex;
|
|
296
|
+
justify-content: center;
|
|
297
|
+
}
|
|
292
298
|
|
|
293
299
|
.rename__card input {
|
|
294
300
|
margin-top: 1rem !important;
|
|
301
|
+
width: 100% !important;
|
|
295
302
|
}
|
|
296
303
|
|
|
297
304
|
.table__cell_icon {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"addCreatedMenus": "Füge bereits erstellte Menüs als Schaltflächen hinzu",
|
|
12
12
|
"addMenu": "Neuen Menünamen hinzufügen",
|
|
13
13
|
"binding": "Bindungen: Zuerst Var mit ID, dann die Bedingung und der Text.",
|
|
14
|
-
"breakpointNewline": "
|
|
14
|
+
"breakpointNewline": "Eine neue Zeile beginnen",
|
|
15
15
|
"call": "Aufruf",
|
|
16
16
|
"cancel": "Stornieren",
|
|
17
17
|
"changeFunction": "Ändert den Wert im Rückgabetext, in diesem Fall von „true“ auf „on“ und von „false“ auf „off“.",
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"addCreatedMenus": "Add already created menus as buttons",
|
|
12
12
|
"addMenu": "Add new Menu Name",
|
|
13
13
|
"binding": "Bindings: First Var with id then the condition and the text.",
|
|
14
|
-
"breakpointNewline": "
|
|
14
|
+
"breakpointNewline": "Add new line",
|
|
15
15
|
"call": "Call",
|
|
16
16
|
"cancel": "Cancel",
|
|
17
17
|
"changeFunction": "Changes the value in the return text, in this case from true to on and false to off",
|
package/admin/words.js
CHANGED
|
@@ -20,10 +20,11 @@ systemDictionary = {
|
|
|
20
20
|
"addCreatedMenus": { "en": "Add already created menus as buttons", "de": "Füge bereits erstellte Menüs als Schaltflächen hinzu", "ru": "Добавляйте уже созданные меню в виде кнопок", "pt": "Adicione menus já criados como botões", "nl": "Voeg reeds gemaakte menu's toe als knoppen", "fr": "Ajouter des menus déjà créés sous forme de boutons", "it": "Aggiungi menu già creati come pulsanti", "es": "Agregar menús ya creados como botones", "pl": "Dodaj już utworzone menu jako przyciski", "uk": "Додайте вже створені меню як кнопки", "zh-cn": "添加已创建的菜单作为按钮"},
|
|
21
21
|
"addMenu": { "en": "Add new Menu Name", "de": "Neuen Menünamen hinzufügen", "ru": "Добавить новое имя меню", "pt": "Adicionar novo nome de menu", "nl": "Nieuwe menunaam toevoegen", "fr": "Ajouter un nouveau nom de menu", "it": "Aggiungi un nuovo nome al menu", "es": "Agregar nuevo nombre de menú", "pl": "Dodaj nową nazwę menu", "uk": "Додайте нову назву меню", "zh-cn": "添加新菜单名称"},
|
|
22
22
|
"binding": { "en": "Bindings: First Var with id then the condition and the text.", "de": "Bindungen: Zuerst Var mit ID, dann die Bedingung und der Text.", "ru": "Привязки: сначала Var с идентификатором, затем условие и текст.", "pt": "Vinculações: primeiro Var com id, depois a condição e o texto.", "nl": "Bindingen: eerst Var met id, daarna de voorwaarde en de tekst.", "fr": "Reliures : D'abord Var avec l'identifiant puis la condition et le texte.", "it": "Binding: prima Var con id poi la condizione e il testo.", "es": "Enlaces: Primero Var con id, luego la condición y el texto.", "pl": "Powiązania: Najpierw Var z identyfikatorem, potem warunek i tekst.", "uk": "Прив’язки: спочатку Var з ідентифікатором, потім умова та текст.", "zh-cn": "绑定:首先是带有 id 的 Var,然后是条件和文本。"},
|
|
23
|
-
"breakpointNewline": { "en": "
|
|
23
|
+
"breakpointNewline": { "en": "Add new line", "de": "Eine neue Zeile beginnen", "ru": "Точка останова для новой строки. Вставьте ее только в текст.", "pt": "Ponto de interrupção para uma nova linha, insira apenas isso no texto", "nl": "Breekpunt voor een nieuwe regel. Voeg dit alleen in de tekst in", "fr": "Point d'arrêt pour une nouvelle ligne, insérez-le uniquement dans le texte", "it": "Punto di interruzione per una nuova riga, inseriscilo solo nel testo", "es": "Punto de interrupción para una nueva línea, solo inserte esto en el texto", "pl": "Punkt przerwania nowej linii. Wstaw go tylko w tekście", "uk": "Точка зупину для нового рядка, вставте це лише в текст", "zh-cn": "新行的断点,仅将其插入文本中"},
|
|
24
24
|
"call": { "en": "Call", "de": "Aufruf", "ru": "Вызов", "pt": "Chamar", "nl": "Telefoongesprek", "fr": "Appel", "it": "Chiamata", "es": "Llamar", "pl": "Dzwonić", "uk": "Телефонуйте", "zh-cn": "称呼"},
|
|
25
25
|
"cancel": { "en": "Cancel", "de": "Stornieren", "ru": "Отмена", "pt": "Cancelar", "nl": "Annuleren", "fr": "Annuler", "it": "Cancellare", "es": "Cancelar", "pl": "Anulować", "uk": "Скасувати", "zh-cn": "取消"},
|
|
26
26
|
"changeFunction": { "en": "Changes the value in the return text, in this case from true to on and false to off", "de": "Ändert den Wert im Rückgabetext, in diesem Fall von „true“ auf „on“ und von „false“ auf „off“.", "ru": "Изменяет значение в возвращаемом тексте, в данном случае с true на on и с false на off.", "pt": "Altera o valor no texto de retorno, neste caso de verdadeiro para ativado e falso para desativado", "nl": "Verandert de waarde in de retourtekst, in dit geval van true naar on en false naar off", "fr": "Modifie la valeur dans le texte de retour, dans ce cas de true à on et false à off", "it": "Modifica il valore nel testo restituito, in questo caso da true a on e false a off", "es": "Cambia el valor en el texto devuelto, en este caso de verdadero a activado y de falso a desactivado.", "pl": "Zmienia wartość w tekście zwracanym, w tym przypadku z true na on i false na off", "uk": "Змінює значення у тексті, що повертається, у цьому випадку з істинного на увімкнене та з неправдивого на вимкнене", "zh-cn": "更改返回文本中的值,在本例中从 true 更改为 on,将 false 更改为 off"},
|
|
27
|
+
"choose": { "en": "Choose", "de": "Wähle aus", "ru": "Выбирать", "pt": "Escolher", "nl": "Kiezen", "fr": "Choisir", "it": "Scegliere", "es": "Elegir", "pl": "Wybierać", "uk": "Виберіть", "zh-cn": "选择"},
|
|
27
28
|
"chooseAction": { "en": "Choose an action", "de": "Wählen Sie eine Aktion", "ru": "Выберите действие", "pt": "Escolha uma ação", "nl": "Kies een actie", "fr": "Choisissez une action", "it": "Scegli un'azione", "es": "Elige una acción", "pl": "Wybierz akcję", "uk": "Виберіть дію", "zh-cn": "选择一个动作"},
|
|
28
29
|
"close": { "en": "Close", "de": "Schließen", "ru": "Закрывать", "pt": "Fechar", "nl": "Dichtbij", "fr": "Fermer", "it": "Vicino", "es": "Cerca", "pl": "Zamknąć", "uk": "Закрити", "zh-cn": "关闭"},
|
|
29
30
|
"commonName": { "en": "Outputs the name of the data point", "de": "Gibt den Namen des Datenpunkts aus", "ru": "Выводит имя точки данных", "pt": "Produz o nome do ponto de dados", "nl": "Voert de naam van het gegevenspunt uit", "fr": "Affiche le nom du point de données", "it": "Restituisce il nome del punto dati", "es": "Muestra el nombre del punto de datos.", "pl": "Wyświetla nazwę punktu danych", "uk": "Виводить назву точки даних", "zh-cn": "输出数据点的名称"},
|
|
@@ -82,6 +83,7 @@ systemDictionary = {
|
|
|
82
83
|
"notifiedByChangeOfAnotherState": { "en": "If you want to be notified of the change of another data point after you have set the data point in the ID input field. The change will only be shared if it is set with ack:true. It is mandatory to specify a text outside the {}, otherwise it will be added automatically.", "de": "Wenn Sie über die Änderung eines anderen Datenpunkts benachrichtigt werden möchten, nachdem Sie den Datenpunkt im Eingabefeld ID festgelegt haben. Die Änderung wird nur geteilt, wenn sie mit ack:true gesetzt ist. Es ist zwingend erforderlich, einen Text außerhalb des {} anzugeben, andernfalls wird er automatisch hinzugefügt.", "ru": "Если вы хотите получать уведомления об изменении другой точки данных после того, как вы установили точку данных в поле ввода идентификатора. Изменение будет опубликовано только в том случае, если для него установлено значение ack:true. Обязательно укажите текст за пределами {}, иначе он будет добавлен автоматически.", "pt": "Se você deseja ser notificado sobre a alteração de outro ponto de dados depois de definir o ponto de dados no campo de entrada ID. A alteração só será compartilhada se estiver definida com ack:true. É obrigatório especificar um texto fora do {}, caso contrário ele será adicionado automaticamente.", "nl": "Als u op de hoogte wilt worden gesteld van de wijziging van een ander datapunt nadat u het datapunt in het ID-invoerveld hebt ingesteld. De wijziging wordt alleen gedeeld als deze is ingesteld met ack:true. Het is verplicht om een tekst buiten de {} op te geven, anders wordt deze automatisch toegevoegd.", "fr": "Si vous souhaitez être informé du changement d'un autre point de données après avoir défini le point de données dans le champ de saisie ID. La modification ne sera partagée que si elle est définie avec ack:true. Il est obligatoire de préciser un texte en dehors du {}, sinon il sera ajouté automatiquement.", "it": "Se desideri essere avvisato della modifica di un altro punto dati dopo aver impostato il punto dati nel campo di immissione ID. La modifica verrà condivisa solo se è impostata con ack:true. È obbligatorio specificare un testo fuori dal {}, altrimenti verrà aggiunto automaticamente.", "es": "Si desea recibir una notificación sobre el cambio de otro punto de datos después de haber configurado el punto de datos en el campo de entrada de ID. El cambio solo se compartirá si se establece con ack:true. Es obligatorio especificar un texto fuera del {}, de lo contrario se agregará automáticamente.", "pl": "Jeśli chcesz otrzymać powiadomienie o zmianie innego punktu danych po ustawieniu punktu danych w polu wprowadzania ID. Zmiana zostanie udostępniona tylko wtedy, gdy zostanie ustawiona opcja ack:true. Obowiązkowe jest podanie tekstu poza {}, w przeciwnym razie zostanie on dodany automatycznie.", "uk": "Якщо ви хочете отримувати сповіщення про зміну іншої точки даних після того, як ви встановили точку даних у полі введення ідентифікатора. Зміну буде надано спільний доступ, лише якщо для неї встановлено ack:true. Обов’язково вказувати текст поза {}, інакше він буде додано автоматично.", "zh-cn": "如果您在 ID 输入字段中设置数据点后希望收到另一个数据点更改的通知。仅当设置了 ack:true 时,更改才会被共享。必须在 {} 之外指定文本,否则将自动添加。"},
|
|
83
84
|
"ok": { "en": "OK", "de": "OK", "ru": "ХОРОШО", "pt": "OK", "nl": "OK", "fr": "D'ACCORD", "it": "OK", "es": "DE ACUERDO", "pl": "OK", "uk": "добре", "zh-cn": "好的"},
|
|
84
85
|
"oneTimeKey": { "en": "Requests clients to resize the keyboard vertically for optimal fit (e.g., make the keyboard smaller if there are just two rows of buttons). Defaults to false, in which case the custom keyboard is always of the same height as the app's standard keyboard.", "de": "Fordert Kunden auf, die Größe der Tastatur vertikal zu ändern, um eine optimale Passform zu erzielen (z. B. die Tastatur kleiner zu machen, wenn nur zwei Tastenreihen vorhanden sind). Der Standardwert ist „false“. In diesem Fall hat die benutzerdefinierte Tastatur immer die gleiche Höhe wie die Standardtastatur der App.", "ru": "Просит клиентов изменить размер клавиатуры по вертикали для оптимального соответствия (например, уменьшить клавиатуру, если на ней всего два ряда кнопок). По умолчанию установлено значение false. В этом случае пользовательская клавиатура всегда имеет ту же высоту, что и стандартная клавиатура приложения.", "pt": "Solicita que os clientes redimensionem o teclado verticalmente para um ajuste ideal (por exemplo, diminuam o tamanho do teclado se houver apenas duas fileiras de botões). O padrão é falso; nesse caso, o teclado personalizado terá sempre a mesma altura do teclado padrão do aplicativo.", "nl": "Verzoekt klanten om het toetsenbord verticaal aan te passen voor een optimale pasvorm (maak het toetsenbord bijvoorbeeld kleiner als er slechts twee rijen knoppen zijn). Standaard ingesteld op false, in welk geval het aangepaste toetsenbord altijd dezelfde hoogte heeft als het standaardtoetsenbord van de app.", "fr": "Demande aux clients de redimensionner le clavier verticalement pour un ajustement optimal (par exemple, réduire la taille du clavier s'il n'y a que deux rangées de boutons). La valeur par défaut est false, auquel cas le clavier personnalisé a toujours la même hauteur que le clavier standard de l'application.", "it": "Richiede ai client di ridimensionare la tastiera verticalmente per adattarla in modo ottimale (ad esempio, riduci la tastiera se sono presenti solo due file di pulsanti). Il valore predefinito è false, nel qual caso la tastiera personalizzata ha sempre la stessa altezza della tastiera standard dell'app.", "es": "Solicita a los clientes que cambien el tamaño del teclado verticalmente para lograr un ajuste óptimo (por ejemplo, reducir el tamaño del teclado si solo hay dos filas de botones). El valor predeterminado es falso, en cuyo caso el teclado personalizado siempre tiene la misma altura que el teclado estándar de la aplicación.", "pl": "Żąda od klientów zmiany rozmiaru klawiatury w pionie w celu zapewnienia optymalnego dopasowania (np. zmniejszenia klawiatury, jeśli są tylko dwa rzędy przycisków). Domyślnie ustawiona jest wartość false. W takim przypadku niestandardowa klawiatura ma zawsze tę samą wysokość co standardowa klawiatura aplikacji.", "uk": "Просить клієнтів змінити розмір клавіатури по вертикалі для оптимального припасування (наприклад, зробити клавіатуру меншою, якщо є лише два ряди кнопок). За замовчуванням значення false, у цьому випадку спеціальна клавіатура завжди має ту саму висоту, що й стандартна клавіатура програми.", "zh-cn": "要求客户垂直调整键盘大小以获得最佳配合(例如,如果只有两行按钮,则缩小键盘)。默认为 false,在这种情况下,自定义键盘始终与应用程序的标准键盘具有相同的高度。"},
|
|
86
|
+
"options": { "en": "Options", "de": "Optionen", "ru": "Параметры", "pt": "Opções", "nl": "Opties", "fr": "Options", "it": "Opzioni", "es": "Opción", "pl": "Opcje", "uk": "Варіанти", "zh-cn": "选项"},
|
|
85
87
|
"overview": { "en": "Overview", "de": "Überblick", "ru": "Обзор", "pt": "Visão geral", "nl": "Overzicht", "fr": "Aperçu", "it": "Panoramica", "es": "Descripción general", "pl": "Przegląd", "uk": "Огляд", "zh-cn": "概述"},
|
|
86
88
|
"parseMode": { "en": "Parse Mode HTML", "de": "HTML im Analysemodus", "ru": "Режим анализа HTML", "pt": "HTML do modo de análise", "nl": "Parseermodus HTML", "fr": "HTML en mode analyse", "it": "Modalità di analisi HTML", "es": "Modo de análisis HTML", "pl": "Tryb analizy kodu HTML", "uk": "Режим аналізу HTML", "zh-cn": "解析模式 HTML"},
|
|
87
89
|
"parseModeBold": { "en": "Text in Parse-Mode is bold", "de": "Text im Parse-Modus ist fett", "ru": "Текст в режиме анализа выделен жирным шрифтом.", "pt": "O texto no modo Parse está em negrito", "nl": "Tekst in de parse-modus is vetgedrukt", "fr": "Le texte en mode analyse est en gras", "it": "Il testo in modalità analisi è in grassetto", "es": "El texto en modo Parse está en negrita", "pl": "Tekst w trybie analizy jest pogrubiony", "uk": "Текст у режимі аналізу виділяється жирним шрифтом", "zh-cn": "解析模式下的文本为粗体"},
|
|
@@ -130,6 +132,4 @@ systemDictionary = {
|
|
|
130
132
|
"valueRound": { "en": "Rounds the value for example to 2 decimal places", "de": "Rundet den Wert beispielsweise auf 2 Dezimalstellen", "ru": "Округляет значение, например, до 2 десятичных знаков.", "pt": "Arredonda o valor, por exemplo, para 2 casas decimais", "nl": "Rondt de waarde bijvoorbeeld af op 2 decimalen", "fr": "Arrondit la valeur par exemple à 2 décimales", "it": "Arrotonda il valore, ad esempio, a 2 cifre decimali", "es": "Redondea el valor, por ejemplo, a 2 decimales.", "pl": "Zaokrągla wartość na przykład do 2 miejsc po przecinku", "uk": "Округлює значення, наприклад, до 2 знаків після коми", "zh-cn": "例如,将值四舍五入到小数点后两位"},
|
|
131
133
|
"values": { "en": "Values", "de": "Werte", "ru": "Ценности", "pt": "Valores", "nl": "Waarden", "fr": "Valeurs", "it": "Valori", "es": "Valores", "pl": "Wartości", "uk": "Цінності", "zh-cn": "价值观"},
|
|
132
134
|
"yes": { "en": "Yes", "de": "Ja", "ru": "Да", "pt": "Sim", "nl": "Ja", "fr": "Oui", "it": "SÌ", "es": "Sí", "pl": "Tak", "uk": "так", "zh-cn": "是的"},
|
|
133
|
-
"choose": { "en": "Choose", "de": "Wähle aus", "ru": "Выбирать", "pt": "Escolher", "nl": "Kiezen", "fr": "Choisir", "it": "Scegliere", "es": "Elegir", "pl": "Wybierać", "uk": "Виберіть", "zh-cn": "选择"},
|
|
134
|
-
"options": { "en": "Options", "de": "Optionen", "ru": "Параметры", "pt": "Opções", "nl": "Opties", "fr": "Options", "it": "Opzioni", "es": "Opción", "pl": "Opcje", "uk": "Варіанти", "zh-cn": "选项"},
|
|
135
135
|
};
|
|
@@ -25,12 +25,12 @@ __export(dynamicValue_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(dynamicValue_exports);
|
|
26
26
|
var import_string = require("../lib/string");
|
|
27
27
|
var import_telegram = require("./telegram");
|
|
28
|
-
const
|
|
28
|
+
const dynamicValueObj = {};
|
|
29
29
|
const setDynamicValue = async (returnText, ack, id, userToSend, telegramParams, parse_mode, confirm) => {
|
|
30
|
-
const {
|
|
31
|
-
let array =
|
|
30
|
+
const { substringExcludeSearch } = (0, import_string.decomposeText)(returnText, "{setDynamicValue:", "}");
|
|
31
|
+
let array = substringExcludeSearch.split(":");
|
|
32
32
|
array = isBraceDeleteEntry(array);
|
|
33
|
-
const text = array[
|
|
33
|
+
const text = array[0];
|
|
34
34
|
if (text) {
|
|
35
35
|
await (0, import_telegram.sendToTelegram)({
|
|
36
36
|
userToSend,
|
|
@@ -39,7 +39,7 @@ const setDynamicValue = async (returnText, ack, id, userToSend, telegramParams,
|
|
|
39
39
|
parse_mode
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
|
-
|
|
42
|
+
dynamicValueObj[userToSend] = {
|
|
43
43
|
id,
|
|
44
44
|
ack,
|
|
45
45
|
returnText: text,
|
|
@@ -47,20 +47,21 @@ const setDynamicValue = async (returnText, ack, id, userToSend, telegramParams,
|
|
|
47
47
|
parse_mode,
|
|
48
48
|
confirm,
|
|
49
49
|
telegramParams,
|
|
50
|
-
valueType: array[
|
|
50
|
+
valueType: array[1],
|
|
51
|
+
navToGoTo: array[3]
|
|
51
52
|
};
|
|
52
|
-
if (array[
|
|
53
|
-
return { confirmText: array[
|
|
53
|
+
if (array[2] && array[2] != "") {
|
|
54
|
+
return { confirmText: array[2], id: array[3] !== "" ? array[3] : void 0 };
|
|
54
55
|
}
|
|
55
56
|
return { confirmText: "", id: void 0 };
|
|
56
57
|
};
|
|
57
58
|
const getDynamicValue = (userToSend) => {
|
|
58
59
|
var _a;
|
|
59
|
-
return (_a =
|
|
60
|
+
return (_a = dynamicValueObj[userToSend]) != null ? _a : null;
|
|
60
61
|
};
|
|
61
62
|
const removeUserFromDynamicValue = (userToSend) => {
|
|
62
|
-
if (
|
|
63
|
-
delete
|
|
63
|
+
if (dynamicValueObj[userToSend]) {
|
|
64
|
+
delete dynamicValueObj[userToSend];
|
|
64
65
|
return true;
|
|
65
66
|
}
|
|
66
67
|
return false;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/app/dynamicValue.ts"],
|
|
4
|
-
"sourcesContent": ["import { decomposeText } from '../lib/string';\nimport { sendToTelegram } from './telegram';\nimport type { SetDynamicValue, SetDynamicValueObj, TelegramParams } from '../types/types';\n\nconst
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA8B;AAC9B,sBAA+B;AAG/B,MAAM,
|
|
4
|
+
"sourcesContent": ["import { decomposeText } from '../lib/string';\nimport { sendToTelegram } from './telegram';\nimport type { SetDynamicValue, SetDynamicValueObj, TelegramParams } from '../types/types';\n\nconst dynamicValueObj: SetDynamicValueObj = {};\nexport const setDynamicValue = async (\n returnText: string,\n ack: boolean,\n id: string,\n userToSend: string,\n telegramParams: TelegramParams,\n parse_mode: boolean,\n confirm: string,\n): Promise<{ confirmText: string; id: string | undefined }> => {\n const { substringExcludeSearch } = decomposeText(returnText, '{setDynamicValue:', '}');\n let array = substringExcludeSearch.split(':');\n array = isBraceDeleteEntry(array);\n const text = array[0];\n if (text) {\n await sendToTelegram({\n userToSend,\n textToSend: text,\n telegramParams,\n parse_mode,\n });\n }\n dynamicValueObj[userToSend] = {\n id,\n ack,\n returnText: text,\n userToSend,\n parse_mode,\n confirm,\n telegramParams,\n valueType: array[1],\n navToGoTo: array[3],\n };\n\n if (array[2] && array[2] != '') {\n return { confirmText: array[2], id: array[3] !== '' ? array[3] : undefined };\n }\n return { confirmText: '', id: undefined };\n};\n\nexport const getDynamicValue = (userToSend: string): SetDynamicValue | null => dynamicValueObj[userToSend] ?? null;\n\nexport const removeUserFromDynamicValue = (userToSend: string): boolean => {\n if (dynamicValueObj[userToSend]) {\n delete dynamicValueObj[userToSend];\n return true;\n }\n return false;\n};\n\nfunction isBraceDeleteEntry(array: string[]): string[] {\n if (array[4] === '}') {\n return array.slice(0, 4);\n }\n return array;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA8B;AAC9B,sBAA+B;AAG/B,MAAM,kBAAsC,CAAC;AACtC,MAAM,kBAAkB,OAC3B,YACA,KACA,IACA,YACA,gBACA,YACA,YAC2D;AAC3D,QAAM,EAAE,uBAAuB,QAAI,6BAAc,YAAY,qBAAqB,GAAG;AACrF,MAAI,QAAQ,uBAAuB,MAAM,GAAG;AAC5C,UAAQ,mBAAmB,KAAK;AAChC,QAAM,OAAO,MAAM,CAAC;AACpB,MAAI,MAAM;AACN,cAAM,gCAAe;AAAA,MACjB;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACA,kBAAgB,UAAU,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,MAAM,CAAC;AAAA,IAClB,WAAW,MAAM,CAAC;AAAA,EACtB;AAEA,MAAI,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI;AAC5B,WAAO,EAAE,aAAa,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,OAAU;AAAA,EAC/E;AACA,SAAO,EAAE,aAAa,IAAI,IAAI,OAAU;AAC5C;AAEO,MAAM,kBAAkB,CAAC,eAA4C;AA5C5E;AA4C+E,+BAAgB,UAAU,MAA1B,YAA+B;AAAA;AAEvG,MAAM,6BAA6B,CAAC,eAAgC;AACvE,MAAI,gBAAgB,UAAU,GAAG;AAC7B,WAAO,gBAAgB,UAAU;AACjC,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,SAAS,mBAAmB,OAA2B;AACnD,MAAI,MAAM,CAAC,MAAM,KAAK;AAClB,WAAO,MAAM,MAAM,GAAG,CAAC;AAAA,EAC3B;AACA,SAAO;AACX;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/app/processData.js
CHANGED
|
@@ -40,7 +40,7 @@ var import_validateMenus = require("./validateMenus");
|
|
|
40
40
|
let timeouts = [];
|
|
41
41
|
async function checkEveryMenuForData({
|
|
42
42
|
menuData,
|
|
43
|
-
|
|
43
|
+
navToGoTo,
|
|
44
44
|
userToSend,
|
|
45
45
|
telegramParams,
|
|
46
46
|
menus,
|
|
@@ -55,7 +55,7 @@ async function checkEveryMenuForData({
|
|
|
55
55
|
import_main.adapter.log.debug(`Nav : ${(0, import_string.jsonString)(menuData[menu])}`);
|
|
56
56
|
if (await processData({
|
|
57
57
|
menuData,
|
|
58
|
-
calledValue,
|
|
58
|
+
calledValue: navToGoTo,
|
|
59
59
|
userToSend,
|
|
60
60
|
groupWithUser: menu,
|
|
61
61
|
telegramParams,
|
|
@@ -89,17 +89,17 @@ async function processData({
|
|
|
89
89
|
}) {
|
|
90
90
|
try {
|
|
91
91
|
let part = {};
|
|
92
|
-
const
|
|
93
|
-
if (
|
|
94
|
-
const valueToSet = (
|
|
95
|
-
valueToSet && (
|
|
92
|
+
const dynamicValue = (0, import_dynamicValue.getDynamicValue)(userToSend);
|
|
93
|
+
if (dynamicValue) {
|
|
94
|
+
const valueToSet = (dynamicValue == null ? void 0 : dynamicValue.valueType) ? (0, import_action.adjustValueType)(calledValue, dynamicValue.valueType) : calledValue;
|
|
95
|
+
valueToSet && (dynamicValue == null ? void 0 : dynamicValue.id) ? await (0, import_setstate.setstateIobroker)({ id: dynamicValue.id, value: valueToSet, ack: dynamicValue == null ? void 0 : dynamicValue.ack }) : await (0, import_telegram.sendToTelegram)({
|
|
96
96
|
userToSend,
|
|
97
|
-
textToSend: `You insert a wrong Type of value, please insert type : ${
|
|
97
|
+
textToSend: `You insert a wrong Type of value, please insert type : ${dynamicValue == null ? void 0 : dynamicValue.valueType}`,
|
|
98
98
|
telegramParams
|
|
99
99
|
});
|
|
100
100
|
(0, import_dynamicValue.removeUserFromDynamicValue)(userToSend);
|
|
101
101
|
const result = await (0, import_backMenu.switchBack)(userToSend, allMenusWithData, menus, true);
|
|
102
|
-
if (result) {
|
|
102
|
+
if (result && !dynamicValue.navToGoTo) {
|
|
103
103
|
const { textToSend, keyboard, parse_mode } = result;
|
|
104
104
|
await (0, import_telegram.sendToTelegram)({ userToSend, textToSend, keyboard, telegramParams, parse_mode });
|
|
105
105
|
return true;
|
|
@@ -127,7 +127,7 @@ async function processData({
|
|
|
127
127
|
if (result == null ? void 0 : result.newNav) {
|
|
128
128
|
await checkEveryMenuForData({
|
|
129
129
|
menuData,
|
|
130
|
-
|
|
130
|
+
navToGoTo: result.newNav,
|
|
131
131
|
userToSend,
|
|
132
132
|
telegramParams,
|
|
133
133
|
menus,
|
|
@@ -143,7 +143,7 @@ async function processData({
|
|
|
143
143
|
return true;
|
|
144
144
|
}
|
|
145
145
|
if (part == null ? void 0 : part.switch) {
|
|
146
|
-
await (0, import_setstate.handleSetState)(part, userToSend,
|
|
146
|
+
await (0, import_setstate.handleSetState)(part, userToSend, null, telegramParams);
|
|
147
147
|
return true;
|
|
148
148
|
}
|
|
149
149
|
if (part == null ? void 0 : part.getData) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/app/processData.ts"],
|
|
4
|
-
"sourcesContent": ["import { adapter } from '../main';\nimport { sendLocationToTelegram, sendToTelegram } from './telegram';\nimport { sendNav } from './sendNav';\nimport { callSubMenu } from './subMenu';\nimport { backMenuFunc, switchBack } from './backMenu';\nimport { handleSetState, setstateIobroker } from './setstate';\nimport { getState } from './getstate';\nimport { sendPic } from './sendpic';\nimport { getDynamicValue, removeUserFromDynamicValue } from './dynamicValue';\nimport { adjustValueType } from './action';\nimport { getChart } from './echarts';\nimport { httpRequest } from './httpRequest';\nimport { errorLogger } from './logging';\nimport type { CheckEveryMenuForDataType, Part, ProcessDataType, Timeouts } from '../types/types';\nimport { jsonString } from '../lib/string';\nimport { isSubmenuOrMenu } from './validateMenus';\n\nlet timeouts: Timeouts[] = [];\n\nexport async function checkEveryMenuForData({\n menuData,\n
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAwB;AACxB,sBAAuD;AACvD,qBAAwB;AACxB,qBAA4B;AAC5B,sBAAyC;AACzC,sBAAiD;AACjD,sBAAyB;AACzB,qBAAwB;AACxB,0BAA4D;AAC5D,oBAAgC;AAChC,qBAAyB;AACzB,yBAA4B;AAC5B,qBAA4B;AAE5B,oBAA2B;AAC3B,2BAAgC;AAEhC,IAAI,WAAuB,CAAC;AAE5B,eAAsB,sBAAsB;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAAgD;AAC5C,aAAW,QAAQ,OAAO;AACtB,UAAM,YAAY,SAAS,IAAI;AAE/B,wBAAQ,IAAI,MAAM,UAAU,IAAI,EAAE;AAClC,wBAAQ,IAAI,MAAM,aAAS,0BAAW,SAAS,IAAI,CAAC,CAAC,EAAE;AAEvD,QACI,MAAM,YAAY;AAAA,MACd;AAAA,MACA;AAAA,
|
|
4
|
+
"sourcesContent": ["import { adapter } from '../main';\nimport { sendLocationToTelegram, sendToTelegram } from './telegram';\nimport { sendNav } from './sendNav';\nimport { callSubMenu } from './subMenu';\nimport { backMenuFunc, switchBack } from './backMenu';\nimport { handleSetState, setstateIobroker } from './setstate';\nimport { getState } from './getstate';\nimport { sendPic } from './sendpic';\nimport { getDynamicValue, removeUserFromDynamicValue } from './dynamicValue';\nimport { adjustValueType } from './action';\nimport { getChart } from './echarts';\nimport { httpRequest } from './httpRequest';\nimport { errorLogger } from './logging';\nimport type { CheckEveryMenuForDataType, Part, ProcessDataType, Timeouts } from '../types/types';\nimport { jsonString } from '../lib/string';\nimport { isSubmenuOrMenu } from './validateMenus';\n\nlet timeouts: Timeouts[] = [];\n\nexport async function checkEveryMenuForData({\n menuData,\n navToGoTo,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n}: CheckEveryMenuForDataType): Promise<boolean> {\n for (const menu of menus) {\n const groupData = menuData[menu];\n\n adapter.log.debug(`Menu : ${menu}`);\n adapter.log.debug(`Nav : ${jsonString(menuData[menu])}`);\n\n if (\n await processData({\n menuData,\n calledValue: navToGoTo,\n userToSend,\n groupWithUser: menu,\n telegramParams,\n allMenusWithData: menuData,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n groupData,\n })\n ) {\n adapter.log.debug('Menu found');\n return true;\n }\n }\n return false;\n}\n\nasync function processData({\n menuData,\n calledValue,\n userToSend,\n groupWithUser,\n telegramParams,\n allMenusWithData,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n groupData,\n}: ProcessDataType): Promise<boolean | undefined> {\n try {\n let part: Part | undefined = {} as Part;\n\n const dynamicValue = getDynamicValue(userToSend);\n if (dynamicValue) {\n const valueToSet = dynamicValue?.valueType\n ? adjustValueType(calledValue, dynamicValue.valueType)\n : calledValue;\n\n valueToSet && dynamicValue?.id\n ? await setstateIobroker({ id: dynamicValue.id, value: valueToSet, ack: dynamicValue?.ack })\n : await sendToTelegram({\n userToSend,\n textToSend: `You insert a wrong Type of value, please insert type : ${dynamicValue?.valueType}`,\n telegramParams,\n });\n\n removeUserFromDynamicValue(userToSend);\n const result = await switchBack(userToSend, allMenusWithData, menus, true);\n\n if (result && !dynamicValue.navToGoTo) {\n const { textToSend, keyboard, parse_mode } = result;\n await sendToTelegram({ userToSend, textToSend, keyboard, telegramParams, parse_mode });\n return true;\n }\n\n await sendNav(part, userToSend, telegramParams);\n return true;\n }\n\n const call = calledValue.includes('menu:') ? calledValue.split(':')[2] : calledValue;\n part = groupData[call];\n\n if (!calledValue.toString().includes('menu:') && isUserActiveCheckbox[groupWithUser]) {\n const nav = part?.nav;\n if (nav) {\n adapter.log.debug(`Menu to Send: ${jsonString(nav)}`);\n\n backMenuFunc({ activePage: call, navigation: nav, userToSend });\n\n if (jsonString(nav).includes('menu:')) {\n adapter.log.debug(`Submenu: ${jsonString(nav)}`);\n\n const result = await callSubMenu({\n jsonStringNav: jsonString(nav),\n userToSend,\n telegramParams,\n part,\n allMenusWithData,\n menus,\n });\n if (result?.newNav) {\n await checkEveryMenuForData({\n menuData,\n navToGoTo: result.newNav,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n });\n }\n return true;\n }\n await sendNav(part, userToSend, telegramParams);\n return true;\n }\n\n if (part?.switch) {\n await handleSetState(part, userToSend, null, telegramParams);\n return true;\n }\n\n if (part?.getData) {\n await getState(part, userToSend, telegramParams);\n return true;\n }\n\n if (part?.sendPic) {\n timeouts = sendPic(part, userToSend, telegramParams, token, directoryPicture, timeouts, timeoutKey);\n return true;\n }\n\n if (part?.location) {\n adapter.log.debug('Send location');\n await sendLocationToTelegram(userToSend, part.location, telegramParams);\n return true;\n }\n\n if (part?.echarts) {\n adapter.log.debug('Send echarts');\n getChart(part.echarts, directoryPicture, userToSend, telegramParams);\n return true;\n }\n\n if (part?.httpRequest) {\n adapter.log.debug('Send http request');\n const result = await httpRequest(part, userToSend, telegramParams, directoryPicture);\n return !!result;\n }\n }\n if (isSubmenuOrMenu(calledValue) && menuData[groupWithUser][call]) {\n adapter.log.debug('Call Submenu');\n await callSubMenu({\n jsonStringNav: calledValue,\n userToSend: userToSend,\n telegramParams: telegramParams,\n part: part,\n allMenusWithData: allMenusWithData,\n menus: menus,\n });\n return true;\n }\n return false;\n } catch (e: any) {\n errorLogger('Error processData:', e, adapter);\n }\n}\n\nexport function getTimeouts(): Timeouts[] {\n return timeouts;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/app/setstate.js
CHANGED
|
@@ -95,6 +95,7 @@ const handleSetState = async (part, userToSend, valueFromSubmenu, telegramParams
|
|
|
95
95
|
userToSend
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
|
+
return;
|
|
98
99
|
}
|
|
99
100
|
if (!returnText.includes("{'id':'")) {
|
|
100
101
|
await (0, import_setStateIdsToListenTo.addSetStateIds)({
|
|
@@ -112,7 +113,12 @@ const handleSetState = async (part, userToSend, valueFromSubmenu, telegramParams
|
|
|
112
113
|
return;
|
|
113
114
|
}
|
|
114
115
|
const text2 = returnText.replace(substring, json.text);
|
|
115
|
-
|
|
116
|
+
let value2 = null;
|
|
117
|
+
if (json.id) {
|
|
118
|
+
const state = await import_main.adapter.getForeignStateAsync(json.id);
|
|
119
|
+
value2 = state ? state.val : null;
|
|
120
|
+
}
|
|
121
|
+
const { textToSend } = (0, import_exchangeValue.exchangeValue)(import_main.adapter, text2, valueFromSubmenu != null ? valueFromSubmenu : value2);
|
|
116
122
|
await (0, import_telegram.sendToTelegram)({
|
|
117
123
|
userToSend,
|
|
118
124
|
textToSend,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/app/setstate.ts"],
|
|
4
|
-
"sourcesContent": ["import { sendToTelegram } from './telegram';\nimport { transformValueToTypeOfId } from '../lib/utilities';\nimport { setDynamicValue } from './dynamicValue';\nimport { adapter } from '../main';\nimport { errorLogger } from './logging';\nimport type { Part, TelegramParams } from '../types/types';\nimport { decomposeText, isNonEmptyString, jsonString, parseJSON } from '../lib/string';\nimport { isDefined } from '../lib/utils';\nimport { config } from '../config/config';\nimport { addSetStateIds } from './setStateIdsToListenTo';\nimport { exchangeValue } from '../lib/exchangeValue';\n\nconst modifiedValue = (valueFromSubmenu: string, value: string): string => {\n return value.includes(config.modifiedValue)\n ? value.replace(config.modifiedValue, valueFromSubmenu)\n : valueFromSubmenu;\n};\n\nconst isDynamicValueToSet = async (value: string | number | boolean): Promise<string | number | boolean> => {\n if (typeof value === 'string' && value.includes(config.dynamicValue.start)) {\n const { substring, substringExcludeSearch: id } = decomposeText(\n value,\n config.dynamicValue.start,\n config.dynamicValue.end,\n );\n\n const newValue = await adapter.getForeignStateAsync(id);\n\n return value.replace(substring, String(newValue?.val));\n }\n return value;\n};\n\nexport const setstateIobroker = async ({\n id,\n value,\n ack,\n}: {\n id: string;\n value: string | number | boolean;\n ack: boolean;\n}): Promise<void> => {\n try {\n const val = await transformValueToTypeOfId(id, value);\n\n adapter.log.debug(`Value to Set: ${jsonString(val)}`);\n if (isDefined(val)) {\n await adapter.setForeignStateAsync(id, val, ack);\n }\n } catch (error: any) {\n errorLogger('Error Setstate', error, adapter);\n }\n};\n\nconst setValue = async (\n id: string,\n value: string,\n valueFromSubmenu: string | number | boolean,\n ack: boolean,\n): Promise<void> => {\n try {\n // If Value is set in Config the value will set to datapoint otherwise the value from submenu, so submenuValuePriority is obsolete\n const valueToSet =\n isDefined(value) && isNonEmptyString(value)\n ? await isDynamicValueToSet(value)\n : modifiedValue(String(valueFromSubmenu), value);\n\n await setstateIobroker({ id, value: valueToSet, ack });\n } catch (error: any) {\n errorLogger('Error setValue', error, adapter);\n }\n};\n\nexport const handleSetState = async (\n part: Part,\n userToSend: string,\n valueFromSubmenu: string | number | boolean,\n telegramParams: TelegramParams,\n): Promise<void> => {\n try {\n if (!part.switch) {\n return;\n }\n for (const { returnText: text, id: ID, parse_mode, confirm, ack, toggle, value } of part.switch) {\n let returnText = text;\n if (returnText.includes(config.setDynamicValue)) {\n const { confirmText, id } = await setDynamicValue(\n returnText,\n ack,\n ID,\n userToSend,\n telegramParams,\n parse_mode,\n confirm,\n );\n\n if (confirm) {\n await addSetStateIds({\n id: id ?? ID,\n confirm,\n returnText: confirmText,\n userToSend,\n });\n }\n }\n\n if (!returnText.includes(\"{'id':'\")) {\n await addSetStateIds({\n id: ID,\n confirm,\n returnText,\n userToSend,\n parse_mode,\n });\n } else {\n returnText = returnText.replace(/'/g, '\"');\n const { substring } = decomposeText(returnText, '{\"id\":', '}');\n const { json, isValidJson } = parseJSON<{ text: string; id: string }>(substring);\n if (!isValidJson) {\n return;\n }\n const text = returnText.replace(substring, json.text);\n const { textToSend } = exchangeValue(adapter, text, valueFromSubmenu);\n\n await sendToTelegram({\n userToSend,\n textToSend,\n telegramParams,\n parse_mode,\n });\n\n await addSetStateIds({\n id: json.id,\n confirm: true,\n returnText: json.text,\n userToSend: userToSend,\n });\n }\n if (toggle) {\n const state = await adapter.getForeignStateAsync(ID);\n\n state\n ? await setstateIobroker({ id: ID, value: !state.val, ack })\n : await setstateIobroker({ id: ID, value: false, ack });\n } else {\n await setValue(ID, value, valueFromSubmenu, ack);\n }\n }\n } catch (error: any) {\n errorLogger('Error Switch', error, adapter);\n }\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAA+B;AAC/B,uBAAyC;AACzC,0BAAgC;AAChC,kBAAwB;AACxB,qBAA4B;AAE5B,oBAAuE;AACvE,mBAA0B;AAC1B,oBAAuB;AACvB,mCAA+B;AAC/B,2BAA8B;AAE9B,MAAM,gBAAgB,CAAC,kBAA0B,UAA0B;AACvE,SAAO,MAAM,SAAS,qBAAO,aAAa,IACpC,MAAM,QAAQ,qBAAO,eAAe,gBAAgB,IACpD;AACV;AAEA,MAAM,sBAAsB,OAAO,UAAyE;AACxG,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,qBAAO,aAAa,KAAK,GAAG;AACxE,UAAM,EAAE,WAAW,wBAAwB,GAAG,QAAI;AAAA,MAC9C;AAAA,MACA,qBAAO,aAAa;AAAA,MACpB,qBAAO,aAAa;AAAA,IACxB;AAEA,UAAM,WAAW,MAAM,oBAAQ,qBAAqB,EAAE;AAEtD,WAAO,MAAM,QAAQ,WAAW,OAAO,qCAAU,GAAG,CAAC;AAAA,EACzD;AACA,SAAO;AACX;AAEO,MAAM,mBAAmB,OAAO;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACJ,MAIqB;AACjB,MAAI;AACA,UAAM,MAAM,UAAM,2CAAyB,IAAI,KAAK;AAEpD,wBAAQ,IAAI,MAAM,qBAAiB,0BAAW,GAAG,CAAC,EAAE;AACpD,YAAI,wBAAU,GAAG,GAAG;AAChB,YAAM,oBAAQ,qBAAqB,IAAI,KAAK,GAAG;AAAA,IACnD;AAAA,EACJ,SAAS,OAAY;AACjB,oCAAY,kBAAkB,OAAO,mBAAO;AAAA,EAChD;AACJ;AAEA,MAAM,WAAW,OACb,IACA,OACA,kBACA,QACgB;AAChB,MAAI;AAEA,UAAM,iBACF,wBAAU,KAAK,SAAK,gCAAiB,KAAK,IACpC,MAAM,oBAAoB,KAAK,IAC/B,cAAc,OAAO,gBAAgB,GAAG,KAAK;AAEvD,UAAM,iBAAiB,EAAE,IAAI,OAAO,YAAY,IAAI,CAAC;AAAA,EACzD,SAAS,OAAY;AACjB,oCAAY,kBAAkB,OAAO,mBAAO;AAAA,EAChD;AACJ;AAEO,MAAM,iBAAiB,OAC1B,MACA,YACA,kBACA,mBACgB;AAChB,MAAI;AACA,QAAI,CAAC,KAAK,QAAQ;AACd;AAAA,IACJ;AACA,eAAW,EAAE,YAAY,MAAM,IAAI,IAAI,YAAY,SAAS,KAAK,QAAQ,MAAM,KAAK,KAAK,QAAQ;AAC7F,UAAI,aAAa;AACjB,UAAI,WAAW,SAAS,qBAAO,eAAe,GAAG;AAC7C,cAAM,EAAE,aAAa,GAAG,IAAI,UAAM;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAEA,YAAI,SAAS;AACT,oBAAM,6CAAe;AAAA,YACjB,IAAI,kBAAM;AAAA,YACV;AAAA,YACA,YAAY;AAAA,YACZ;AAAA,UACJ,CAAC;AAAA,QACL;AAAA,MACJ;AAEA,UAAI,CAAC,WAAW,SAAS,SAAS,GAAG;AACjC,kBAAM,6CAAe;AAAA,UACjB,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ,CAAC;AAAA,MACL,OAAO;AACH,qBAAa,WAAW,QAAQ,MAAM,GAAG;AACzC,cAAM,EAAE,UAAU,QAAI,6BAAc,YAAY,UAAU,GAAG;AAC7D,cAAM,EAAE,MAAM,YAAY,QAAI,yBAAwC,SAAS;AAC/E,YAAI,CAAC,aAAa;AACd;AAAA,QACJ;AACA,cAAMA,QAAO,WAAW,QAAQ,WAAW,KAAK,IAAI;AACpD,cAAM,EAAE,WAAW,QAAI,oCAAc,
|
|
6
|
-
"names": ["text"]
|
|
4
|
+
"sourcesContent": ["import { sendToTelegram } from './telegram';\nimport { transformValueToTypeOfId } from '../lib/utilities';\nimport { setDynamicValue } from './dynamicValue';\nimport { adapter } from '../main';\nimport { errorLogger } from './logging';\nimport type { Part, TelegramParams } from '../types/types';\nimport { decomposeText, isNonEmptyString, jsonString, parseJSON } from '../lib/string';\nimport { isDefined } from '../lib/utils';\nimport { config } from '../config/config';\nimport { addSetStateIds } from './setStateIdsToListenTo';\nimport { exchangeValue } from '../lib/exchangeValue';\n\nconst modifiedValue = (valueFromSubmenu: string, value: string): string => {\n return value.includes(config.modifiedValue)\n ? value.replace(config.modifiedValue, valueFromSubmenu)\n : valueFromSubmenu;\n};\n\nconst isDynamicValueToSet = async (value: string | number | boolean): Promise<string | number | boolean> => {\n if (typeof value === 'string' && value.includes(config.dynamicValue.start)) {\n const { substring, substringExcludeSearch: id } = decomposeText(\n value,\n config.dynamicValue.start,\n config.dynamicValue.end,\n );\n\n const newValue = await adapter.getForeignStateAsync(id);\n\n return value.replace(substring, String(newValue?.val));\n }\n return value;\n};\n\nexport const setstateIobroker = async ({\n id,\n value,\n ack,\n}: {\n id: string;\n value: string | number | boolean;\n ack: boolean;\n}): Promise<void> => {\n try {\n const val = await transformValueToTypeOfId(id, value);\n\n adapter.log.debug(`Value to Set: ${jsonString(val)}`);\n if (isDefined(val)) {\n await adapter.setForeignStateAsync(id, val, ack);\n }\n } catch (error: any) {\n errorLogger('Error Setstate', error, adapter);\n }\n};\n\nconst setValue = async (\n id: string,\n value: string,\n valueFromSubmenu: null | string | number | boolean,\n ack: boolean,\n): Promise<void> => {\n try {\n // If Value is set in Config the value will set to datapoint otherwise the value from submenu, so submenuValuePriority is obsolete\n const valueToSet =\n isDefined(value) && isNonEmptyString(value)\n ? await isDynamicValueToSet(value)\n : modifiedValue(String(valueFromSubmenu), value);\n\n await setstateIobroker({ id, value: valueToSet, ack });\n } catch (error: any) {\n errorLogger('Error setValue', error, adapter);\n }\n};\n\nexport const handleSetState = async (\n part: Part,\n userToSend: string,\n valueFromSubmenu: null | string | number | boolean,\n telegramParams: TelegramParams,\n): Promise<void> => {\n try {\n if (!part.switch) {\n return;\n }\n for (const { returnText: text, id: ID, parse_mode, confirm, ack, toggle, value } of part.switch) {\n let returnText = text;\n if (returnText.includes(config.setDynamicValue)) {\n const { confirmText, id } = await setDynamicValue(\n returnText,\n ack,\n ID,\n userToSend,\n telegramParams,\n parse_mode,\n confirm,\n );\n\n if (confirm) {\n await addSetStateIds({\n id: id ?? ID,\n confirm,\n returnText: confirmText,\n userToSend,\n });\n }\n return;\n }\n\n if (!returnText.includes(\"{'id':'\")) {\n await addSetStateIds({\n id: ID,\n confirm,\n returnText,\n userToSend,\n parse_mode,\n });\n } else {\n returnText = returnText.replace(/'/g, '\"');\n const { substring } = decomposeText(returnText, '{\"id\":', '}');\n const { json, isValidJson } = parseJSON<{ text: string; id: string }>(substring);\n if (!isValidJson) {\n return;\n }\n const text = returnText.replace(substring, json.text);\n let value: null | ioBroker.StateValue = null;\n\n if (json.id) {\n const state = await adapter.getForeignStateAsync(json.id);\n value = state ? state.val : null;\n }\n\n const { textToSend } = exchangeValue(adapter, text, valueFromSubmenu ?? value);\n\n await sendToTelegram({\n userToSend,\n textToSend,\n telegramParams,\n parse_mode,\n });\n\n await addSetStateIds({\n id: json.id,\n confirm: true,\n returnText: json.text,\n userToSend: userToSend,\n });\n }\n if (toggle) {\n const state = await adapter.getForeignStateAsync(ID);\n\n state\n ? await setstateIobroker({ id: ID, value: !state.val, ack })\n : await setstateIobroker({ id: ID, value: false, ack });\n } else {\n await setValue(ID, value, valueFromSubmenu, ack);\n }\n }\n } catch (error: any) {\n errorLogger('Error Switch', error, adapter);\n }\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["text", "value"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var status_exports = {};
|
|
20
|
+
__export(status_exports, {
|
|
21
|
+
checkStatus: () => checkStatus
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(status_exports);
|
|
24
|
+
var import_string = require("../lib/string");
|
|
25
|
+
var import_config = require("../config/config");
|
|
26
|
+
var import_appUtils = require("../lib/appUtils");
|
|
27
|
+
var import_utils = require("../lib/utils");
|
|
28
|
+
var import_time = require("../lib/time");
|
|
29
|
+
var import_exchangeValue = require("../lib/exchangeValue");
|
|
30
|
+
const checkStatus = async (adapter, text) => {
|
|
31
|
+
const { substring, substringExcludeSearch, textExcludeSubstring } = (0, import_string.decomposeText)(
|
|
32
|
+
text,
|
|
33
|
+
import_config.config.status.start,
|
|
34
|
+
import_config.config.status.end
|
|
35
|
+
);
|
|
36
|
+
const { id, shouldChangeByStatusParameter } = (0, import_appUtils.statusIdAndParams)(substringExcludeSearch);
|
|
37
|
+
const stateValue = await adapter.getForeignStateAsync(id);
|
|
38
|
+
if (!(0, import_utils.isDefined)(stateValue == null ? void 0 : stateValue.val)) {
|
|
39
|
+
adapter.log.debug(`State not found for id : "${id}"`);
|
|
40
|
+
return text.replace(substring, "");
|
|
41
|
+
}
|
|
42
|
+
const stateValueString = String(stateValue.val);
|
|
43
|
+
if (text.includes(import_config.config.time)) {
|
|
44
|
+
return (0, import_time.integrateTimeIntoText)(textExcludeSubstring, stateValueString).replace(stateValueString, "");
|
|
45
|
+
}
|
|
46
|
+
const modifiedText = text.replace(substring, "&&");
|
|
47
|
+
const { textToSend, error } = (0, import_exchangeValue.exchangeValue)(adapter, modifiedText, stateValue.val, shouldChangeByStatusParameter);
|
|
48
|
+
return !error ? textToSend : modifiedText;
|
|
49
|
+
};
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
checkStatus
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/app/status.ts"],
|
|
4
|
+
"sourcesContent": ["import type TelegramMenu from '../main';\nimport { decomposeText } from '../lib/string';\nimport { config } from '../config/config';\nimport { statusIdAndParams } from '../lib/appUtils';\nimport { isDefined } from '../lib/utils';\nimport { integrateTimeIntoText } from '../lib/time';\nimport { exchangeValue } from '../lib/exchangeValue';\n\nexport const checkStatus = async (adapter: TelegramMenu, text: string): Promise<string> => {\n const { substring, substringExcludeSearch, textExcludeSubstring } = decomposeText(\n text,\n config.status.start,\n config.status.end,\n ); //substring {status:'ID':true} new | old {status:'id':'ID':true}\n\n const { id, shouldChangeByStatusParameter } = statusIdAndParams(substringExcludeSearch);\n\n const stateValue = await adapter.getForeignStateAsync(id);\n\n if (!isDefined(stateValue?.val)) {\n adapter.log.debug(`State not found for id : \"${id}\"`);\n return text.replace(substring, '');\n }\n\n const stateValueString = String(stateValue.val);\n\n if (text.includes(config.time)) {\n return integrateTimeIntoText(textExcludeSubstring, stateValueString).replace(stateValueString, '');\n }\n\n const modifiedText = text.replace(substring, '&&');\n const { textToSend, error } = exchangeValue(adapter, modifiedText, stateValue.val, shouldChangeByStatusParameter);\n return !error ? textToSend : modifiedText;\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA8B;AAC9B,oBAAuB;AACvB,sBAAkC;AAClC,mBAA0B;AAC1B,kBAAsC;AACtC,2BAA8B;AAEvB,MAAM,cAAc,OAAO,SAAuB,SAAkC;AACvF,QAAM,EAAE,WAAW,wBAAwB,qBAAqB,QAAI;AAAA,IAChE;AAAA,IACA,qBAAO,OAAO;AAAA,IACd,qBAAO,OAAO;AAAA,EAClB;AAEA,QAAM,EAAE,IAAI,8BAA8B,QAAI,mCAAkB,sBAAsB;AAEtF,QAAM,aAAa,MAAM,QAAQ,qBAAqB,EAAE;AAExD,MAAI,KAAC,wBAAU,yCAAY,GAAG,GAAG;AAC7B,YAAQ,IAAI,MAAM,6BAA6B,EAAE,GAAG;AACpD,WAAO,KAAK,QAAQ,WAAW,EAAE;AAAA,EACrC;AAEA,QAAM,mBAAmB,OAAO,WAAW,GAAG;AAE9C,MAAI,KAAK,SAAS,qBAAO,IAAI,GAAG;AAC5B,eAAO,mCAAsB,sBAAsB,gBAAgB,EAAE,QAAQ,kBAAkB,EAAE;AAAA,EACrG;AAEA,QAAM,eAAe,KAAK,QAAQ,WAAW,IAAI;AACjD,QAAM,EAAE,YAAY,MAAM,QAAI,oCAAc,SAAS,cAAc,WAAW,KAAK,6BAA6B;AAChH,SAAO,CAAC,QAAQ,aAAa;AACjC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -34,11 +34,11 @@ function isNoValueParameter(textToSend) {
|
|
|
34
34
|
}
|
|
35
35
|
return { insertValue, textToSend };
|
|
36
36
|
}
|
|
37
|
-
const exchangeValue = (adapter, textToSend, val) => {
|
|
37
|
+
const exchangeValue = (adapter, textToSend, val, shouldChange = true) => {
|
|
38
38
|
var _a;
|
|
39
39
|
const result = isNoValueParameter(textToSend);
|
|
40
40
|
textToSend = result.textToSend;
|
|
41
|
-
if (textToSend.includes(import_config.config.change.start)) {
|
|
41
|
+
if (textToSend.includes(import_config.config.change.start) && shouldChange) {
|
|
42
42
|
const { start, end, command } = import_config.config.change;
|
|
43
43
|
const { substring, textExcludeSubstring } = (0, import_string.decomposeText)(textToSend, start, end);
|
|
44
44
|
const stringExcludedChange = (0, import_string.replaceAll)(substring, "'", '"').replace(command, "");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/exchangeValue.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Adapter, ExchangeValueReturn, PrimitiveType } from '../types/types';\nimport { config } from '../config/config';\nimport { decomposeText, parseJSON, removeMultiSpaces, replaceAll } from './string';\n\nexport function isNoValueParameter(textToSend: string): { insertValue: boolean; textToSend: string } {\n let insertValue = true;\n if (textToSend.includes('{novalue}')) {\n textToSend = removeMultiSpaces(textToSend.replace('{novalue}', ''));\n insertValue = false;\n }\n return { insertValue, textToSend };\n}\n\nexport const exchangeValue = (\n adapter: Adapter,\n textToSend: string,\n val: PrimitiveType | null | undefined,\n): ExchangeValueReturn => {\n const result = isNoValueParameter(textToSend);\n\n textToSend = result.textToSend;\n if (textToSend.includes(config.change.start)) {\n const { start, end, command } = config.change;\n const { substring, textExcludeSubstring } = decomposeText(textToSend, start, end); // change{\"true\":\"an\",\"false\":\"aus\"}\n\n const stringExcludedChange = replaceAll(substring, \"'\", '\"').replace(command, ''); // {\"true\":\"an\",\"false\":\"aus\"}\n\n const { json, isValidJson } = parseJSON<Record<string, string>>(stringExcludedChange);\n if (isValidJson) {\n const newValue = json[String(val)] ?? val;\n\n return {\n newValue,\n textToSend: removeMultiSpaces(\n exchangePlaceholderWithValue(textExcludeSubstring, result.insertValue ? newValue : ''),\n ),\n error: false,\n };\n }\n adapter.log.error(`There is a error in your input: ${stringExcludedChange}`);\n return { newValue: val ?? '', textToSend, error: true };\n }\n\n return {\n textToSend: exchangePlaceholderWithValue(textToSend, result.insertValue ? (val ?? '') : ''),\n newValue: val ?? '',\n error: false,\n };\n};\n\nexport function exchangePlaceholderWithValue(textToSend: string, val: PrimitiveType): string {\n const searchString = getPlaceholderValue(textToSend);\n return searchString !== ''\n ? textToSend.replace(searchString, val.toString()).trim()\n : `${textToSend} ${val}`.trim();\n}\n\nexport function getPlaceholderValue(textToSend: string): string {\n if (textToSend.includes('&&')) {\n return '&&';\n }\n if (textToSend.includes('&&')) {\n return '&&';\n }\n return '';\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAuB;AACvB,oBAAwE;AAEjE,SAAS,mBAAmB,YAAkE;AACjG,MAAI,cAAc;AAClB,MAAI,WAAW,SAAS,WAAW,GAAG;AAClC,qBAAa,iCAAkB,WAAW,QAAQ,aAAa,EAAE,CAAC;AAClE,kBAAc;AAAA,EAClB;AACA,SAAO,EAAE,aAAa,WAAW;AACrC;AAEO,MAAM,gBAAgB,CACzB,SACA,YACA,
|
|
4
|
+
"sourcesContent": ["import type { Adapter, ExchangeValueReturn, PrimitiveType } from '../types/types';\nimport { config } from '../config/config';\nimport { decomposeText, parseJSON, removeMultiSpaces, replaceAll } from './string';\n\nexport function isNoValueParameter(textToSend: string): { insertValue: boolean; textToSend: string } {\n let insertValue = true;\n if (textToSend.includes('{novalue}')) {\n textToSend = removeMultiSpaces(textToSend.replace('{novalue}', ''));\n insertValue = false;\n }\n return { insertValue, textToSend };\n}\n\nexport const exchangeValue = (\n adapter: Adapter,\n textToSend: string,\n val: PrimitiveType | null | undefined,\n shouldChange = true,\n): ExchangeValueReturn => {\n const result = isNoValueParameter(textToSend);\n\n textToSend = result.textToSend;\n if (textToSend.includes(config.change.start) && shouldChange) {\n const { start, end, command } = config.change;\n const { substring, textExcludeSubstring } = decomposeText(textToSend, start, end); // change{\"true\":\"an\",\"false\":\"aus\"}\n\n const stringExcludedChange = replaceAll(substring, \"'\", '\"').replace(command, ''); // {\"true\":\"an\",\"false\":\"aus\"}\n\n const { json, isValidJson } = parseJSON<Record<string, string>>(stringExcludedChange);\n if (isValidJson) {\n const newValue = json[String(val)] ?? val;\n\n return {\n newValue,\n textToSend: removeMultiSpaces(\n exchangePlaceholderWithValue(textExcludeSubstring, result.insertValue ? newValue : ''),\n ),\n error: false,\n };\n }\n adapter.log.error(`There is a error in your input: ${stringExcludedChange}`);\n return { newValue: val ?? '', textToSend, error: true };\n }\n\n return {\n textToSend: exchangePlaceholderWithValue(textToSend, result.insertValue ? (val ?? '') : ''),\n newValue: val ?? '',\n error: false,\n };\n};\n\nexport function exchangePlaceholderWithValue(textToSend: string, val: PrimitiveType): string {\n const searchString = getPlaceholderValue(textToSend);\n return searchString !== ''\n ? textToSend.replace(searchString, val.toString()).trim()\n : `${textToSend} ${val}`.trim();\n}\n\nexport function getPlaceholderValue(textToSend: string): string {\n if (textToSend.includes('&&')) {\n return '&&';\n }\n if (textToSend.includes('&&')) {\n return '&&';\n }\n return '';\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAAuB;AACvB,oBAAwE;AAEjE,SAAS,mBAAmB,YAAkE;AACjG,MAAI,cAAc;AAClB,MAAI,WAAW,SAAS,WAAW,GAAG;AAClC,qBAAa,iCAAkB,WAAW,QAAQ,aAAa,EAAE,CAAC;AAClE,kBAAc;AAAA,EAClB;AACA,SAAO,EAAE,aAAa,WAAW;AACrC;AAEO,MAAM,gBAAgB,CACzB,SACA,YACA,KACA,eAAe,SACO;AAlB1B;AAmBI,QAAM,SAAS,mBAAmB,UAAU;AAE5C,eAAa,OAAO;AACpB,MAAI,WAAW,SAAS,qBAAO,OAAO,KAAK,KAAK,cAAc;AAC1D,UAAM,EAAE,OAAO,KAAK,QAAQ,IAAI,qBAAO;AACvC,UAAM,EAAE,WAAW,qBAAqB,QAAI,6BAAc,YAAY,OAAO,GAAG;AAEhF,UAAM,2BAAuB,0BAAW,WAAW,KAAK,GAAG,EAAE,QAAQ,SAAS,EAAE;AAEhF,UAAM,EAAE,MAAM,YAAY,QAAI,yBAAkC,oBAAoB;AACpF,QAAI,aAAa;AACb,YAAM,YAAW,UAAK,OAAO,GAAG,CAAC,MAAhB,YAAqB;AAEtC,aAAO;AAAA,QACH;AAAA,QACA,gBAAY;AAAA,UACR,6BAA6B,sBAAsB,OAAO,cAAc,WAAW,EAAE;AAAA,QACzF;AAAA,QACA,OAAO;AAAA,MACX;AAAA,IACJ;AACA,YAAQ,IAAI,MAAM,mCAAmC,oBAAoB,EAAE;AAC3E,WAAO,EAAE,UAAU,oBAAO,IAAI,YAAY,OAAO,KAAK;AAAA,EAC1D;AAEA,SAAO;AAAA,IACH,YAAY,6BAA6B,YAAY,OAAO,cAAe,oBAAO,KAAM,EAAE;AAAA,IAC1F,UAAU,oBAAO;AAAA,IACjB,OAAO;AAAA,EACX;AACJ;AAEO,SAAS,6BAA6B,YAAoB,KAA4B;AACzF,QAAM,eAAe,oBAAoB,UAAU;AACnD,SAAO,iBAAiB,KAClB,WAAW,QAAQ,cAAc,IAAI,SAAS,CAAC,EAAE,KAAK,IACtD,GAAG,UAAU,IAAI,GAAG,GAAG,KAAK;AACtC;AAEO,SAAS,oBAAoB,YAA4B;AAC5D,MAAI,WAAW,SAAS,IAAI,GAAG;AAC3B,WAAO;AAAA,EACX;AACA,MAAI,WAAW,SAAS,YAAY,GAAG;AACnC,WAAO;AAAA,EACX;AACA,SAAO;AACX;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/build/lib/string.js
CHANGED
|
@@ -69,8 +69,8 @@ const cleanUpString = (text) => {
|
|
|
69
69
|
return "";
|
|
70
70
|
}
|
|
71
71
|
return removeMultiSpaces(
|
|
72
|
-
text.replace(/^['"]|['"]$/g, "").replace(/\\n/g, "\n").replace(/ \\\n/g, "\n").replace(/\\(?!n)/g, "")
|
|
73
|
-
// Entferne
|
|
72
|
+
text.replace(/^['"]|['"]$/g, "").replace(/\\n/g, "\n").replace(/ \\\n/g, "\n").replace(/\\(?!n)/g, "").replace(/\n /g, "\n")
|
|
73
|
+
// Entferne Leerzeichen vor Zeilenumbrüchen
|
|
74
74
|
);
|
|
75
75
|
};
|
|
76
76
|
function decomposeText(text, firstSearch, secondSearch) {
|
package/build/lib/string.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/string.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Adapter, DecomposeTextReturnType, StringReplacerObj } from '../types/types';\nimport { isTruthy } from './utils';\nimport { errorLogger } from '../app/logging';\nimport type { BooleanString } from '@/types/app';\n\nexport const jsonString = (val?: string | number | boolean | object | null): string => JSON.stringify(val);\n\nexport function parseJSON<T>(\n val: string,\n adapter?: Adapter,\n): { json: string; isValidJson: false } | { json: T; isValidJson: true } {\n try {\n return { json: JSON.parse(val) as T, isValidJson: true };\n } catch (e) {\n if (adapter) {\n errorLogger('Error parseJSON:', e, adapter);\n }\n return { json: val, isValidJson: false };\n }\n}\n\nexport const replaceAll = (text: string, searchValue: string, replaceValue: string): string => {\n const escapedSearchValue = searchValue.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // Escape-Sonderzeichen\n return text.replace(new RegExp(escapedSearchValue, 'g'), replaceValue);\n};\n\nexport const replaceAllItems = (text: string, searched: (string | { search: string; val: string })[]): string => {\n searched.forEach(item => {\n if (typeof item === 'string') {\n text = replaceAll(text, item, '');\n } else {\n text = replaceAll(text, item.search, item.val);\n }\n });\n return text;\n};\n\nexport const removeQuotes = (text: string): string => text.replace(/['\"]/g, '');\nexport const removeMultiSpaces = (text: string): string => text.replace(/ {2,}/g, ' ');\n\nexport const cleanUpString = (text?: string): string => {\n if (!text) {\n return '';\n }\n return removeMultiSpaces(\n text\n .replace(/^['\"]|['\"]$/g, '') // Entferne Anf\u00FChrungszeichen am Anfang/Ende\n .replace(/\\\\n/g, '\\n') // Ersetze \\n durch einen echten Zeilenumbruch\n .replace(/ \\\\\\n/g, '\\n') // Ersetze \\n mit Leerzeichen davor durch einen echten Zeilenumbruch\n .replace(/\\\\(?!n)/g, '')
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAyB;AACzB,qBAA4B;AAGrB,MAAM,aAAa,CAAC,QAA4D,KAAK,UAAU,GAAG;AAElG,SAAS,UACZ,KACA,SACqE;AACrE,MAAI;AACA,WAAO,EAAE,MAAM,KAAK,MAAM,GAAG,GAAQ,aAAa,KAAK;AAAA,EAC3D,SAAS,GAAG;AACR,QAAI,SAAS;AACT,sCAAY,oBAAoB,GAAG,OAAO;AAAA,IAC9C;AACA,WAAO,EAAE,MAAM,KAAK,aAAa,MAAM;AAAA,EAC3C;AACJ;AAEO,MAAM,aAAa,CAAC,MAAc,aAAqB,iBAAiC;AAC3F,QAAM,qBAAqB,YAAY,QAAQ,uBAAuB,MAAM;AAC5E,SAAO,KAAK,QAAQ,IAAI,OAAO,oBAAoB,GAAG,GAAG,YAAY;AACzE;AAEO,MAAM,kBAAkB,CAAC,MAAc,aAAmE;AAC7G,WAAS,QAAQ,UAAQ;AACrB,QAAI,OAAO,SAAS,UAAU;AAC1B,aAAO,WAAW,MAAM,MAAM,EAAE;AAAA,IACpC,OAAO;AACH,aAAO,WAAW,MAAM,KAAK,QAAQ,KAAK,GAAG;AAAA,IACjD;AAAA,EACJ,CAAC;AACD,SAAO;AACX;AAEO,MAAM,eAAe,CAAC,SAAyB,KAAK,QAAQ,SAAS,EAAE;AACvE,MAAM,oBAAoB,CAAC,SAAyB,KAAK,QAAQ,UAAU,GAAG;AAE9E,MAAM,gBAAgB,CAAC,SAA0B;AACpD,MAAI,CAAC,MAAM;AACP,WAAO;AAAA,EACX;AACA,SAAO;AAAA,IACH,KACK,QAAQ,gBAAgB,EAAE,EAC1B,QAAQ,QAAQ,IAAI,EACpB,QAAQ,UAAU,IAAI,EACtB,QAAQ,YAAY,EAAE;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import type { Adapter, DecomposeTextReturnType, StringReplacerObj } from '../types/types';\nimport { isTruthy } from './utils';\nimport { errorLogger } from '../app/logging';\nimport type { BooleanString } from '@/types/app';\n\nexport const jsonString = (val?: string | number | boolean | object | null): string => JSON.stringify(val);\n\nexport function parseJSON<T>(\n val: string,\n adapter?: Adapter,\n): { json: string; isValidJson: false } | { json: T; isValidJson: true } {\n try {\n return { json: JSON.parse(val) as T, isValidJson: true };\n } catch (e) {\n if (adapter) {\n errorLogger('Error parseJSON:', e, adapter);\n }\n return { json: val, isValidJson: false };\n }\n}\n\nexport const replaceAll = (text: string, searchValue: string, replaceValue: string): string => {\n const escapedSearchValue = searchValue.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // Escape-Sonderzeichen\n return text.replace(new RegExp(escapedSearchValue, 'g'), replaceValue);\n};\n\nexport const replaceAllItems = (text: string, searched: (string | { search: string; val: string })[]): string => {\n searched.forEach(item => {\n if (typeof item === 'string') {\n text = replaceAll(text, item, '');\n } else {\n text = replaceAll(text, item.search, item.val);\n }\n });\n return text;\n};\n\nexport const removeQuotes = (text: string): string => text.replace(/['\"]/g, '');\nexport const removeMultiSpaces = (text: string): string => text.replace(/ {2,}/g, ' ');\n\nexport const cleanUpString = (text?: string): string => {\n if (!text) {\n return '';\n }\n return removeMultiSpaces(\n text\n .replace(/^['\"]|['\"]$/g, '') // Entferne Anf\u00FChrungszeichen am Anfang/Ende\n .replace(/\\\\n/g, '\\n') // Ersetze \\n durch einen echten Zeilenumbruch\n .replace(/ \\\\\\n/g, '\\n') // Ersetze \\n mit Leerzeichen davor durch einen echten Zeilenumbruch\n .replace(/\\\\(?!n)/g, '') // Entferne alle Backslashes, die nicht von einem 'n' gefolgt werden)\n .replace(/\\n /g, '\\n'), // Entferne Leerzeichen vor Zeilenumbr\u00FCchen\n );\n};\n\nexport function decomposeText(text: string, firstSearch: string, secondSearch: string): DecomposeTextReturnType {\n const startindex = text.indexOf(firstSearch);\n const endindex = text.indexOf(secondSearch, startindex);\n const substring = text.substring(startindex, endindex + secondSearch.length);\n const substringExcludedSearch = stringReplacer(substring, [firstSearch, secondSearch]);\n const textWithoutSubstring = text.replace(substring, '').trim();\n return {\n startindex,\n endindex,\n substring,\n textExcludeSubstring: textWithoutSubstring,\n substringExcludeSearch: substringExcludedSearch,\n };\n}\n\nexport const isString = (value: unknown): value is string => typeof value === 'string';\n\nexport function stringReplacer(substring: string, valueToReplace: string[] | StringReplacerObj[]): string {\n if (typeof valueToReplace[0] === 'string') {\n (valueToReplace as string[]).forEach(item => {\n substring = substring.replace(item, '');\n });\n return substring;\n }\n\n (valueToReplace as StringReplacerObj[]).forEach(({ val, newValue }) => {\n substring = substring.replace(val, newValue);\n });\n return substring;\n}\n\nexport const pad = (value: number, length: number = 2): string => {\n if (value < 0) {\n return `-${(value * -1).toString().padStart(length - 1, '0')}`;\n }\n return value.toString().padStart(length, '0');\n};\n\nexport function getNewline(newline: BooleanString): '' | '\\n' {\n return isTruthy(newline) ? '\\n' : '';\n}\n\nexport function isBooleanString(str: string): boolean {\n return str === 'true' || str === 'false';\n}\n\nexport const isNonEmptyString = (str: string): boolean => str.trim() !== '';\nexport const isEmptyString = (str: string): boolean => str.trim() === '';\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|