From 21d8e9e20e9f421ad06d31af4619cee171647b35 Mon Sep 17 00:00:00 2001 From: Marcus Davies <55892693+marcus-j-davies@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:02:54 +0100 Subject: [PATCH] Feat: add `$dayjs` support to JSONata engine. --- package.json | 3 ++- .../@node-red/editor-client/locales/de/jsonata.json | 4 ++++ .../editor-client/locales/en-US/jsonata.json | 4 ++++ .../editor-client/locales/es-ES/jsonata.json | 4 ++++ .../@node-red/editor-client/locales/fr/jsonata.json | 4 ++++ .../@node-red/editor-client/locales/ja/jsonata.json | 4 ++++ .../@node-red/editor-client/locales/ko/jsonata.json | 4 ++++ .../editor-client/locales/pt-BR/jsonata.json | 4 ++++ .../@node-red/editor-client/locales/ru/jsonata.json | 4 ++++ .../editor-client/locales/zh-CN/jsonata.json | 4 ++++ .../editor-client/locales/zh-TW/jsonata.json | 4 ++++ .../editor-client/src/vendor/jsonata/formatter.js | 1 + packages/node_modules/@node-red/util/lib/util.js | 11 +++++++++++ 13 files changed, 54 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 5c41a2999..7f256ab93 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,8 @@ "uglify-js": "3.17.4", "uuid": "9.0.1", "ws": "7.5.10", - "xml2js": "0.6.2" + "xml2js": "0.6.2", + "dayjs": "1.11.13" }, "optionalDependencies": { "@node-rs/bcrypt": "1.10.4" diff --git a/packages/node_modules/@node-red/editor-client/locales/de/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/de/jsonata.json index 77e32c09b..7a562c744 100644 --- a/packages/node_modules/@node-red/editor-client/locales/de/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/de/jsonata.json @@ -270,5 +270,9 @@ "$moment": { "args": "[str]", "desc": "Liefert ein `date` Objekt unter Benutzung der Moment Library." + }, + "$dayjs": { + "args": "", + "desc": "Erhält ein Datumsobjekt mithilfe der dayjs-Bibliothek." } } diff --git a/packages/node_modules/@node-red/editor-client/locales/en-US/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/en-US/jsonata.json index 6dad125f3..3e143e251 100644 --- a/packages/node_modules/@node-red/editor-client/locales/en-US/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/en-US/jsonata.json @@ -274,5 +274,9 @@ "$clone": { "args": "value", "desc": "Safely clone an object." + }, + "$dayjs": { + "args": "", + "desc": "Gets a date object using the dayjs library." } } diff --git a/packages/node_modules/@node-red/editor-client/locales/es-ES/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/es-ES/jsonata.json index eaf720bfb..8cd4e0aab 100644 --- a/packages/node_modules/@node-red/editor-client/locales/es-ES/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/es-ES/jsonata.json @@ -274,5 +274,9 @@ "$clone": { "args": "value", "desc": "Clona un objeto de forma segura." + }, + "$dayjs": { + "args": "", + "desc": "Obtiene un objeto de fecha utilizando la biblioteca dayjs." } } diff --git a/packages/node_modules/@node-red/editor-client/locales/fr/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/fr/jsonata.json index fca57953a..5b0a6b05b 100644 --- a/packages/node_modules/@node-red/editor-client/locales/fr/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/fr/jsonata.json @@ -274,5 +274,9 @@ "$clone": { "args": "valeur", "desc": "Cloner un objet en toute sécurité." + }, + "$dayjs": { + "args": "", + "desc": "Obtient un objet date en utilisant la bibliothèque dayjs." } } diff --git a/packages/node_modules/@node-red/editor-client/locales/ja/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/ja/jsonata.json index 7391ce6a3..58d666fd3 100644 --- a/packages/node_modules/@node-red/editor-client/locales/ja/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/ja/jsonata.json @@ -274,5 +274,9 @@ "$clone": { "args": "value", "desc": "オブジェクトを安全に複製します。" + }, + "$dayjs": { + "args": "", + "desc": "dayjsライブラリを使用して日付オブジェクトを取得します。" } } diff --git a/packages/node_modules/@node-red/editor-client/locales/ko/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/ko/jsonata.json index bd8a0d2ee..018b35cfb 100644 --- a/packages/node_modules/@node-red/editor-client/locales/ko/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/ko/jsonata.json @@ -218,5 +218,9 @@ "$env": { "args": "arg", "desc": "환경변수를 값으로 반환합니다.\n\n 이 함수는 Node-RED 정의 함수입니다." + }, + "$dayjs": { + "args": "", + "desc": "dayjs 라이브러리를 사용하여 날짜 객체를 가져옵니다." } } diff --git a/packages/node_modules/@node-red/editor-client/locales/pt-BR/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/pt-BR/jsonata.json index 9d948335c..9b7b52666 100644 --- a/packages/node_modules/@node-red/editor-client/locales/pt-BR/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/pt-BR/jsonata.json @@ -270,5 +270,9 @@ "$moment": { "args": "[str]", "desc": "Obtém um objeto de dados usando a biblioteca 'Moment'." + }, + "$dayjs": { + "args": "", + "desc": "Obtém um objeto de data usando a biblioteca dayjs." } } diff --git a/packages/node_modules/@node-red/editor-client/locales/ru/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/ru/jsonata.json index 4871aa69e..369edad33 100644 --- a/packages/node_modules/@node-red/editor-client/locales/ru/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/ru/jsonata.json @@ -270,5 +270,9 @@ "$moment": { "args": "[str]", "desc": "Получает date объект, используя библиотеку Moment." + }, + "$dayjs": { + "args": "", + "desc": "Получает объект даты, используя библиотеку dayjs." } } diff --git a/packages/node_modules/@node-red/editor-client/locales/zh-CN/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/zh-CN/jsonata.json index cf71ebc77..4f1b1453f 100644 --- a/packages/node_modules/@node-red/editor-client/locales/zh-CN/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/zh-CN/jsonata.json @@ -274,5 +274,9 @@ "$clone": { "args": "value", "desc": "安全克隆对象." + }, + "$dayjs": { + "args": "", + "desc": "使用 dayjs 库获取日期对象。" } } diff --git a/packages/node_modules/@node-red/editor-client/locales/zh-TW/jsonata.json b/packages/node_modules/@node-red/editor-client/locales/zh-TW/jsonata.json index 2fc36bd27..b9c0852be 100644 --- a/packages/node_modules/@node-red/editor-client/locales/zh-TW/jsonata.json +++ b/packages/node_modules/@node-red/editor-client/locales/zh-TW/jsonata.json @@ -274,5 +274,9 @@ "$clone": { "args": "value", "desc": "安全克隆對象." + }, + "$dayjs": { + "args": "", + "desc": "使用 dayjs 函式庫獲取日期對象。" } } diff --git a/packages/node_modules/@node-red/editor-client/src/vendor/jsonata/formatter.js b/packages/node_modules/@node-red/editor-client/src/vendor/jsonata/formatter.js index 2431a8bbd..95aae5e20 100644 --- a/packages/node_modules/@node-red/editor-client/src/vendor/jsonata/formatter.js +++ b/packages/node_modules/@node-red/editor-client/src/vendor/jsonata/formatter.js @@ -163,6 +163,7 @@ '$clone': { args:[ 'arg' ]}, '$contains':{ args:[ 'str', 'pattern' ]}, '$count':{ args:[ 'array' ]}, + '$dayjs':{ args:[ ]}, '$decodeUrl':{ args:[ 'str' ]}, '$decodeUrlComponent':{ args:[ 'str' ]}, '$distinct':{ args:[ 'array' ]}, diff --git a/packages/node_modules/@node-red/util/lib/util.js b/packages/node_modules/@node-red/util/lib/util.js index 9ebb46bc0..1b047fc70 100644 --- a/packages/node_modules/@node-red/util/lib/util.js +++ b/packages/node_modules/@node-red/util/lib/util.js @@ -26,6 +26,14 @@ const safeJSONStringify = require("json-stringify-safe"); const util = require("util"); const { hasOwnProperty } = Object.prototype; const log = require("./log") + +/* dayjs */ +const dayjs = require("dayjs"); +const utc = require("dayjs/plugin/utc"); +const timezone = require("dayjs/plugin/timezone"); +dayjs.extend(utc); +dayjs.extend(timezone); + /** * Safely returns the object constructor name. * @return {String} the name of the object constructor if it exists, empty string otherwise. @@ -727,6 +735,9 @@ function prepareJSONataExpression(value,node) { expr.assign('moment', function(arg1, arg2, arg3, arg4) { return moment(arg1, arg2, arg3, arg4); }); + expr.assign('dayjs', function(arg1, arg2, arg3, arg4) { + return dayjs(arg1, arg2, arg3, arg4) + }); expr.registerFunction('clone', cloneMessage, '<(oa)-:o>'); expr._legacyMode = /(^|[^a-zA-Z0-9_'".])msg([^a-zA-Z0-9_'"]|$)/.test(value); expr._node = node;