diff --git a/ui/components/ConditionForm.vue b/ui/components/ConditionForm.vue index a39dbc3c..39619f5d 100644 --- a/ui/components/ConditionForm.vue +++ b/ui/components/ConditionForm.vue @@ -209,6 +209,7 @@ diff --git a/ui/pages/notifications.vue b/ui/pages/notifications.vue index 9a3457a4..846f27ed 100644 --- a/ui/pages/notifications.vue +++ b/ui/pages/notifications.vue @@ -139,6 +139,7 @@ div.is-centered { diff --git a/ui/pages/presets.vue b/ui/pages/presets.vue index d5fd477e..8da337fd 100644 --- a/ui/pages/presets.vue +++ b/ui/pages/presets.vue @@ -213,6 +213,7 @@ div.is-centered { diff --git a/ui/utils/importer.ts b/ui/utils/importer.ts new file mode 100644 index 00000000..f3d4484b --- /dev/null +++ b/ui/utils/importer.ts @@ -0,0 +1,21 @@ +const encode = (obj: Record): string => { + const jsonStr = JSON.stringify(obj); + const utf8Bytes = new TextEncoder().encode(jsonStr); + const binary = String.fromCharCode(...utf8Bytes); + const base64 = btoa(binary); + return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); +} + +const decode = (str: string): object => { + const base64 = str + .replace(/-/g, '+') + .replace(/_/g, '/') + .padEnd(str.length + (4 - str.length % 4) % 4, '='); + + const binary = atob(base64); + const bytes = Uint8Array.from(binary, c => c.charCodeAt(0)); + const jsonStr = new TextDecoder().decode(bytes); + return JSON.parse(jsonStr); +} + +export { encode, decode } diff --git a/ui/utils/index.js b/ui/utils/index.js index 7ec8308d..20a27c32 100644 --- a/ui/utils/index.js +++ b/ui/utils/index.js @@ -406,33 +406,6 @@ const convertCliOptions = async opts => { return data } -/** - * URL Safe Base64 Encode. - * - * @param {String} data The data to encode - * - * @returns {String} The encoded data - */ -const base64UrlEncode = data => btoa(data).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); - -/** - * URL Safe Base64 Decode. - * - * @param {String} input The input string to decode - * - * @returns {String} The decoded data - */ -const base64UrlDecode = input => { - let base64 = input.replace(/-/g, '+').replace(/_/g, '/'); - const pad = base64.length % 4; - if (pad) { - base64 += '='.repeat(4 - pad); - } - - return atob(base64); -} - - /** * Check if array or object has data. * @@ -539,8 +512,6 @@ export { makeDownload, formatBytes, convertCliOptions, - base64UrlEncode, - base64UrlDecode, has_data, toggleClass, cleanObject,