# ghostkit/2.25.0/gutenberg/utils/encode-decode/index.js

Block Animations, Motion &amp; Scroll Effects – Ghost Kit, version 2.25.0. 93 lines.

- Page: https://pluginprobe.com/plugins/ghostkit/2.25.0/code/gutenberg/utils/encode-decode/index.js
- Raw: https://pluginprobe.com/plugins/ghostkit/2.25.0/raw/gutenberg/utils/encode-decode/index.js
- Modified: 2023-01-04T15:48:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/ghostkit/2.25.0/code/gutenberg/utils/encode-decode/index.js#L10-L20`.

```javascript
const eCache = {};
const dCache = {};

/**
 * Encode URI component with `try {} catch` and caching.
 *
 * @param {string} str - decoded string.
 * @return {string} - new encoded string.
 */
export function maybeEncode(str) {
  // return cached string.
  if (eCache[str]) {
    return eCache[str];
  }

  let result = {};

  // Object
  if (typeof str === 'object') {
    Object.keys(str).forEach((k) => {
      result[maybeEncode(k)] = maybeEncode(str[k]);
    });

    return result;
  }

  // String
  result = str;

  if (typeof result === 'string') {
    try {
      // Because of these replacements, some attributes can't be exported to XML without being broken. So, we need to replace it manually with something safe.
      // https://github.com/WordPress/gutenberg/blob/88645e4b268acf5746e914159e3ce790dcb1665a/packages/blocks/src/api/serializer.js#L246-L271
      result = result.replace(/--/gm, '_u002d__u002d_');

      result = encodeURIComponent(result);
    } catch (e) {
      // eslint-disable-next-line
      console.warn(e);
    }
  }

  // save to cache.
  eCache[str] = result;

  return result;
}

/**
 * Encode URI component with `try {} catch` and caching.
 *
 * @param {string} str - decoded string.
 * @return {string} - new encoded string.
 */
export function maybeDecode(str) {
  // return cached string.
  if (dCache[str]) {
    return dCache[str];
  }

  let result = {};

  // Object
  if (typeof str === 'object') {
    Object.keys(str).forEach((k) => {
      result[maybeDecode(k)] = maybeDecode(str[k]);
    });

    return result;
  }

  // String
  result = str;

  if (typeof result === 'string') {
    try {
      result = decodeURIComponent(result);

      // Because of these replacements, some attributes can't be exported to XML without being broken. So, we need to replace it manually with something safe.
      // https://github.com/WordPress/gutenberg/blob/88645e4b268acf5746e914159e3ce790dcb1665a/packages/blocks/src/api/serializer.js#L246-L271
      result = result.replace(/_u002d__u002d_/gm, '--');
    } catch (e) {
      // eslint-disable-next-line
      console.warn(e);
    }
  }

  // save to cache.
  dCache[str] = result;

  return result;
}

```
