diff --git a/ReactNativeClient/package-lock.json b/ReactNativeClient/package-lock.json index 853614f759..22c77e15e2 100644 --- a/ReactNativeClient/package-lock.json +++ b/ReactNativeClient/package-lock.json @@ -4881,7 +4881,6 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -8078,9 +8077,9 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "patch-package": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.1.tgz", - "integrity": "sha512-dfCtQor63PPij6DDYtCzBRoO5nNAcMSg7Cmh+DLhR+s3t0OLQBdvFxJksZHBe1J2MjsSWDjTF4+oQKFbdkssIg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-6.2.2.tgz", + "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==", "dev": true, "requires": { "@yarnpkg/lockfile": "^1.1.0", @@ -9993,9 +9992,9 @@ "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" }, "slug": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/slug/-/slug-3.3.4.tgz", - "integrity": "sha512-VpHbtRCEWmgaZsrZcTsVl/Dhw98lcrOYDO17DNmJCNpppI6s3qJvnNu2Q3D4L84/2bi6vkW40mjNQI9oGQsflg==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/slug/-/slug-3.4.0.tgz", + "integrity": "sha512-s234DYtuRCkzVNL8dL9BRFNmlZUF9NUGjxWG+wwBKPzUFUADrhkjKGVNhDaZs2Lc+UKh3085KItaKilwJA9I2Q==" }, "slugify": { "version": "1.3.6", diff --git a/ReactNativeClient/package.json b/ReactNativeClient/package.json index 39b7bf0c7a..08ef89fb87 100644 --- a/ReactNativeClient/package.json +++ b/ReactNativeClient/package.json @@ -83,13 +83,13 @@ "redux": "4.0.0", "reselect": "^4.0.0", "rn-fetch-blob": "^0.12.0", + "slug": "^3.4.0", "stream": "0.0.2", "string-natural-compare": "^2.0.2", "string-padding": "^1.0.2", "timers": "^0.1.1", "url": "^0.11.0", "url-parse": "^1.4.7", - "slug": "^3.3.4", "uuid": "^3.0.1", "valid-url": "^1.0.9", "word-wrap": "^1.2.3", @@ -104,7 +104,7 @@ "gulp": "^4.0.2", "jetifier": "^1.6.5", "metro-react-native-babel-preset": "^0.54.1", - "patch-package": "^6.2.1", + "patch-package": "^6.2.2", "react-test-renderer": "^16.8.3" } } diff --git a/patches/slug+3.4.0.patch b/patches/slug+3.4.0.patch new file mode 100644 index 0000000000..8c372659df --- /dev/null +++ b/patches/slug+3.4.0.patch @@ -0,0 +1,38 @@ +diff --git a/node_modules/slug/slug.js b/node_modules/slug/slug.js +index b40320b..2be9650 100644 +--- a/node_modules/slug/slug.js ++++ b/node_modules/slug/slug.js +@@ -51,13 +51,31 @@ + throw new Error('String "' + str + '" reaches code believed to be unreachable; please open an issue at https://github.com/Trott/slug/issues/new') + } + +- if (typeof window === 'undefined') { ++ if (typeof window !== 'undefined' && window.btoa) { ++ base64 = function (input) { ++ return btoa(unescape(encodeURIComponent(input))) ++ } ++ } else if (typeof Buffer !== 'undefined') { + base64 = function (input) { + return Buffer.from(input).toString('base64') + } + } else { ++ // Polyfill for environments that don't have any btoa or Buffer class (eg. React Native) ++ // Copied from https://github.com/davidchambers/Base64.js/blob/a121f75bb10c8dd5d557886c4b1069b31258d230/base64.js#L22 + base64 = function (input) { +- return btoa(unescape(encodeURIComponent(input))) ++ var str = unescape(encodeURIComponent(input + '')) ++ for ( ++ var block, charCode, idx = 0, map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', output = ''; ++ str.charAt(idx | 0) || (map = '=', idx % 1); ++ output += map.charAt(63 & block >> 8 - idx % 1 * 8) ++ ) { ++ charCode = str.charCodeAt(idx += 3 / 4) ++ if (charCode > 0xFF) { ++ throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.") ++ } ++ block = block << 8 | charCode ++ } ++ return output + } + } +