@edx/frontend-platform 3.4.1 → 3.5.0

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/i18n/lib.js CHANGED
@@ -47,6 +47,8 @@ var cookies = new Cookies();
47
47
  var supportedLocales = ['ar', // Arabic
48
48
  // NOTE: 'en' is not included in this list intentionally, since it's the fallback.
49
49
  'es-419', // Spanish, Latin American
50
+ 'fa', // Farsi
51
+ 'fa-ir', // Farsi, Iran
50
52
  'fr', // French
51
53
  'zh-cn', // Chinese, Simplified
52
54
  'ca', // Catalan
@@ -62,6 +64,7 @@ var supportedLocales = ['ar', // Arabic
62
64
  var rtlLocales = ['ar', // Arabic
63
65
  'he', // Hebrew
64
66
  'fa', // Farsi (not currently supported)
67
+ 'fa-ir', // Farsi Iran
65
68
  'ur' // Urdu (not currently supported)
66
69
  ];
67
70
  var config = null;
package/i18n/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","names":["PropTypes","Cookies","merge","cookies","supportedLocales","rtlLocales","config","loggingService","messages","intlShape","object","getLoggingService","LOCALE_TOPIC","LOCALE_CHANGED","getCookies","getPrimaryLanguageSubtag","code","split","findSupportedLocale","locale","undefined","getLocale","Error","cookieLangPref","get","LANGUAGE_PREFERENCE_COOKIE_NAME","toLowerCase","global","navigator","language","getMessages","isRtl","includes","handleRtl","document","getElementsByTagName","setAttribute","messagesShape","ar","objectOf","string","en","fr","ca","he","id","pl","ru","th","uk","optionsShape","isRequired","shape","logError","func","oneOfType","arrayOf","mergeMessages","messagesArray","Array","isArray","configure","options","checkPropTypes","ENVIRONMENT","Object","keys","forEach","key","indexOf","console","warn"],"sources":["../../src/i18n/lib.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport Cookies from 'universal-cookie';\nimport merge from 'lodash.merge';\n\nimport '@formatjs/intl-pluralrules/polyfill';\nimport '@formatjs/intl-pluralrules/locale-data/ar';\nimport '@formatjs/intl-pluralrules/locale-data/en';\nimport '@formatjs/intl-pluralrules/locale-data/es';\nimport '@formatjs/intl-pluralrules/locale-data/fr';\nimport '@formatjs/intl-pluralrules/locale-data/zh';\nimport '@formatjs/intl-pluralrules/locale-data/ca';\nimport '@formatjs/intl-pluralrules/locale-data/he';\nimport '@formatjs/intl-pluralrules/locale-data/id';\nimport '@formatjs/intl-pluralrules/locale-data/ko';\nimport '@formatjs/intl-pluralrules/locale-data/pl';\nimport '@formatjs/intl-pluralrules/locale-data/pt';\nimport '@formatjs/intl-pluralrules/locale-data/ru';\nimport '@formatjs/intl-pluralrules/locale-data/th';\nimport '@formatjs/intl-pluralrules/locale-data/uk';\n\nimport '@formatjs/intl-relativetimeformat/polyfill';\nimport '@formatjs/intl-relativetimeformat/locale-data/ar';\nimport '@formatjs/intl-relativetimeformat/locale-data/en';\nimport '@formatjs/intl-relativetimeformat/locale-data/es';\nimport '@formatjs/intl-relativetimeformat/locale-data/fr';\nimport '@formatjs/intl-relativetimeformat/locale-data/zh';\nimport '@formatjs/intl-relativetimeformat/locale-data/ca';\nimport '@formatjs/intl-relativetimeformat/locale-data/he';\nimport '@formatjs/intl-relativetimeformat/locale-data/id';\nimport '@formatjs/intl-relativetimeformat/locale-data/ko';\nimport '@formatjs/intl-relativetimeformat/locale-data/pl';\nimport '@formatjs/intl-relativetimeformat/locale-data/pt';\nimport '@formatjs/intl-relativetimeformat/locale-data/ru';\nimport '@formatjs/intl-relativetimeformat/locale-data/th';\nimport '@formatjs/intl-relativetimeformat/locale-data/uk';\n\nconst cookies = new Cookies();\nconst supportedLocales = [\n 'ar', // Arabic\n // NOTE: 'en' is not included in this list intentionally, since it's the fallback.\n 'es-419', // Spanish, Latin American\n 'fr', // French\n 'zh-cn', // Chinese, Simplified\n 'ca', // Catalan\n 'he', // Hebrew\n 'id', // Indonesian\n 'ko-kr', // Korean (Korea)\n 'pl', // Polish\n 'pt-br', // Portuguese (Brazil)\n 'ru', // Russian\n 'th', // Thai\n 'uk', // Ukrainian\n];\nconst rtlLocales = [\n 'ar', // Arabic\n 'he', // Hebrew\n 'fa', // Farsi (not currently supported)\n 'ur', // Urdu (not currently supported)\n];\n\nlet config = null;\nlet loggingService = null;\nlet messages = null;\n\n/**\n * @memberof module:Internationalization\n *\n * Prior versions of react-intl (our primary implementation of the i18n service) included a\n * PropTypes-based 'shape' for its `intl` object. This has since been removed. For legacy\n * compatibility, we include an `intlShape` export that is set to PropTypes.object. Usage of this\n * export is deprecated.\n *\n * @deprecated\n */\nexport const intlShape = PropTypes.object;\n\n/**\n *\n * @ignore\n * @returns {LoggingService}\n */\nexport const getLoggingService = () => loggingService;\n\n/**\n * @memberof module:Internationalization\n */\nexport const LOCALE_TOPIC = 'LOCALE';\n\n/**\n * @memberof module:Internationalization\n */\nexport const LOCALE_CHANGED = `${LOCALE_TOPIC}.CHANGED`;\n\n/**\n *\n * @memberof module:Internationalization\n * @returns {Cookies}\n */\nexport function getCookies() {\n return cookies;\n}\n\n/**\n * Some of our dependencies function on primary language subtags, rather than full locales.\n * This function strips a locale down to that first subtag. Depending on the code, this\n * may be 2 or more characters.\n *\n * @param {string} code\n * @memberof module:Internationalization\n */\nexport function getPrimaryLanguageSubtag(code) {\n return code.split('-')[0];\n}\n\n/**\n * Finds the closest supported locale to the one provided. This is done in three steps:\n *\n * 1. Returning the locale itself if its exact language code is supported.\n * 2. Returning the primary language subtag of the language code if it is supported (ar for ar-eg,\n * for instance).\n * 3. Returning 'en' if neither of the above produce a supported locale.\n *\n * @param {string} locale\n * @returns {string}\n * @memberof module:Internationalization\n */\nexport function findSupportedLocale(locale) {\n if (messages[locale] !== undefined) {\n return locale;\n }\n\n if (messages[getPrimaryLanguageSubtag(locale)] !== undefined) {\n return getPrimaryLanguageSubtag(locale);\n }\n\n return 'en';\n}\n\n/**\n * Get the locale from the cookie or, failing that, the browser setting.\n * Gracefully fall back to a more general primary language subtag or to English (en)\n * if we don't support that language.\n *\n * @param {string} locale If a locale is provided, returns the closest supported locale. Optional.\n * @throws An error if i18n has not yet been configured.\n * @returns {string}\n * @memberof module:Internationalization\n */\nexport function getLocale(locale) {\n if (messages === null) {\n throw new Error('getLocale called before configuring i18n. Call configure with messages first.');\n }\n // 1. Explicit application request\n if (locale !== undefined) {\n return findSupportedLocale(locale);\n }\n // 2. User setting in cookie\n const cookieLangPref = cookies\n .get(config.LANGUAGE_PREFERENCE_COOKIE_NAME);\n if (cookieLangPref) {\n return findSupportedLocale(cookieLangPref.toLowerCase());\n }\n // 3. Browser language (default)\n // Note that some browers prefer upper case for the region part of the locale, while others don't.\n // Thus the toLowerCase, for consistency.\n // https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/language\n return findSupportedLocale(global.navigator.language.toLowerCase());\n}\n\n/**\n * Returns messages for the provided locale, or the user's preferred locale if no argument is\n * provided.\n *\n * @param {string} [locale=getLocale()]\n * @memberof module:Internationalization\n */\nexport function getMessages(locale = getLocale()) {\n return messages[locale];\n}\n\n/**\n * Determines if the provided locale is a right-to-left language.\n *\n * @param {string} locale\n * @memberof module:Internationalization\n */\nexport function isRtl(locale) {\n return rtlLocales.includes(locale);\n}\n\n/**\n * Handles applying the RTL stylesheet and \"dir=rtl\" attribute to the html tag if the current locale\n * is a RTL language.\n *\n * @memberof module:Internationalization\n */\nexport function handleRtl() {\n if (isRtl(getLocale())) {\n global.document.getElementsByTagName('html')[0].setAttribute('dir', 'rtl');\n } else {\n global.document.getElementsByTagName('html')[0].setAttribute('dir', 'ltr');\n }\n}\n\nconst messagesShape = {\n ar: PropTypes.objectOf(PropTypes.string), // Arabic\n en: PropTypes.objectOf(PropTypes.string),\n 'es-419': PropTypes.objectOf(PropTypes.string), // Spanish, Latin American\n fr: PropTypes.objectOf(PropTypes.string), // French\n 'zh-cn': PropTypes.objectOf(PropTypes.string), // Chinese, Simplified\n ca: PropTypes.objectOf(PropTypes.string), // Catalan\n he: PropTypes.objectOf(PropTypes.string), // Hebrew\n id: PropTypes.objectOf(PropTypes.string), // Indonesian\n 'ko-kr': PropTypes.objectOf(PropTypes.string), // Korean (Korea)\n pl: PropTypes.objectOf(PropTypes.string), // Polish\n 'pt-br': PropTypes.objectOf(PropTypes.string), // Portuguese (Brazil)\n ru: PropTypes.objectOf(PropTypes.string), // Russian\n th: PropTypes.objectOf(PropTypes.string), // Thai\n uk: PropTypes.objectOf(PropTypes.string), // Ukrainian\n};\n\nconst optionsShape = {\n config: PropTypes.object.isRequired,\n loggingService: PropTypes.shape({\n logError: PropTypes.func.isRequired,\n }).isRequired,\n messages: PropTypes.oneOfType([\n PropTypes.shape(messagesShape),\n PropTypes.arrayOf(PropTypes.shape(messagesShape)),\n ]).isRequired,\n};\n\n/**\n *\n *\n * @param {Array} [messagesArray=[]]\n * @returns {Object}\n * @memberof module:Internationalization\n */\nexport function mergeMessages(messagesArray = []) {\n return Array.isArray(messagesArray) ? merge({}, ...messagesArray) : {};\n}\n\n/**\n * Configures the i18n library with messages for your application.\n *\n * Logs a warning if it detects a locale it doesn't expect (as defined by the supportedLocales list\n * above), or if an expected locale is not provided.\n *\n * @param {Object} options\n * @param {LoggingService} options.loggingService\n * @param {Object} options.config\n * @param {Object} options.messages\n * @memberof module:Internationalization\n */\nexport function configure(options) {\n PropTypes.checkPropTypes(optionsShape, options, 'property', 'i18n');\n // eslint-disable-next-line prefer-destructuring\n loggingService = options.loggingService;\n // eslint-disable-next-line prefer-destructuring\n config = options.config;\n messages = Array.isArray(options.messages) ? mergeMessages(options.messages) : options.messages;\n\n if (config.ENVIRONMENT !== 'production') {\n Object.keys(messages).forEach((key) => {\n if (supportedLocales.indexOf(key) < 0) {\n console.warn(`Unexpected locale: ${key}`); // eslint-disable-line no-console\n }\n });\n\n supportedLocales.forEach((key) => {\n if (messages[key] === undefined) {\n console.warn(`Missing locale: ${key}`); // eslint-disable-line no-console\n }\n });\n }\n\n handleRtl();\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"lib.js","names":["PropTypes","Cookies","merge","cookies","supportedLocales","rtlLocales","config","loggingService","messages","intlShape","object","getLoggingService","LOCALE_TOPIC","LOCALE_CHANGED","getCookies","getPrimaryLanguageSubtag","code","split","findSupportedLocale","locale","undefined","getLocale","Error","cookieLangPref","get","LANGUAGE_PREFERENCE_COOKIE_NAME","toLowerCase","global","navigator","language","getMessages","isRtl","includes","handleRtl","document","getElementsByTagName","setAttribute","messagesShape","ar","objectOf","string","en","fr","ca","he","id","pl","ru","th","uk","optionsShape","isRequired","shape","logError","func","oneOfType","arrayOf","mergeMessages","messagesArray","Array","isArray","configure","options","checkPropTypes","ENVIRONMENT","Object","keys","forEach","key","indexOf","console","warn"],"sources":["../../src/i18n/lib.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport Cookies from 'universal-cookie';\nimport merge from 'lodash.merge';\n\nimport '@formatjs/intl-pluralrules/polyfill';\nimport '@formatjs/intl-pluralrules/locale-data/ar';\nimport '@formatjs/intl-pluralrules/locale-data/en';\nimport '@formatjs/intl-pluralrules/locale-data/es';\nimport '@formatjs/intl-pluralrules/locale-data/fr';\nimport '@formatjs/intl-pluralrules/locale-data/zh';\nimport '@formatjs/intl-pluralrules/locale-data/ca';\nimport '@formatjs/intl-pluralrules/locale-data/he';\nimport '@formatjs/intl-pluralrules/locale-data/id';\nimport '@formatjs/intl-pluralrules/locale-data/ko';\nimport '@formatjs/intl-pluralrules/locale-data/pl';\nimport '@formatjs/intl-pluralrules/locale-data/pt';\nimport '@formatjs/intl-pluralrules/locale-data/ru';\nimport '@formatjs/intl-pluralrules/locale-data/th';\nimport '@formatjs/intl-pluralrules/locale-data/uk';\n\nimport '@formatjs/intl-relativetimeformat/polyfill';\nimport '@formatjs/intl-relativetimeformat/locale-data/ar';\nimport '@formatjs/intl-relativetimeformat/locale-data/en';\nimport '@formatjs/intl-relativetimeformat/locale-data/es';\nimport '@formatjs/intl-relativetimeformat/locale-data/fr';\nimport '@formatjs/intl-relativetimeformat/locale-data/zh';\nimport '@formatjs/intl-relativetimeformat/locale-data/ca';\nimport '@formatjs/intl-relativetimeformat/locale-data/he';\nimport '@formatjs/intl-relativetimeformat/locale-data/id';\nimport '@formatjs/intl-relativetimeformat/locale-data/ko';\nimport '@formatjs/intl-relativetimeformat/locale-data/pl';\nimport '@formatjs/intl-relativetimeformat/locale-data/pt';\nimport '@formatjs/intl-relativetimeformat/locale-data/ru';\nimport '@formatjs/intl-relativetimeformat/locale-data/th';\nimport '@formatjs/intl-relativetimeformat/locale-data/uk';\n\nconst cookies = new Cookies();\nconst supportedLocales = [\n 'ar', // Arabic\n // NOTE: 'en' is not included in this list intentionally, since it's the fallback.\n 'es-419', // Spanish, Latin American\n 'fa', // Farsi\n 'fa-ir', // Farsi, Iran\n 'fr', // French\n 'zh-cn', // Chinese, Simplified\n 'ca', // Catalan\n 'he', // Hebrew\n 'id', // Indonesian\n 'ko-kr', // Korean (Korea)\n 'pl', // Polish\n 'pt-br', // Portuguese (Brazil)\n 'ru', // Russian\n 'th', // Thai\n 'uk', // Ukrainian\n];\nconst rtlLocales = [\n 'ar', // Arabic\n 'he', // Hebrew\n 'fa', // Farsi (not currently supported)\n 'fa-ir', // Farsi Iran\n 'ur', // Urdu (not currently supported)\n];\n\nlet config = null;\nlet loggingService = null;\nlet messages = null;\n\n/**\n * @memberof module:Internationalization\n *\n * Prior versions of react-intl (our primary implementation of the i18n service) included a\n * PropTypes-based 'shape' for its `intl` object. This has since been removed. For legacy\n * compatibility, we include an `intlShape` export that is set to PropTypes.object. Usage of this\n * export is deprecated.\n *\n * @deprecated\n */\nexport const intlShape = PropTypes.object;\n\n/**\n *\n * @ignore\n * @returns {LoggingService}\n */\nexport const getLoggingService = () => loggingService;\n\n/**\n * @memberof module:Internationalization\n */\nexport const LOCALE_TOPIC = 'LOCALE';\n\n/**\n * @memberof module:Internationalization\n */\nexport const LOCALE_CHANGED = `${LOCALE_TOPIC}.CHANGED`;\n\n/**\n *\n * @memberof module:Internationalization\n * @returns {Cookies}\n */\nexport function getCookies() {\n return cookies;\n}\n\n/**\n * Some of our dependencies function on primary language subtags, rather than full locales.\n * This function strips a locale down to that first subtag. Depending on the code, this\n * may be 2 or more characters.\n *\n * @param {string} code\n * @memberof module:Internationalization\n */\nexport function getPrimaryLanguageSubtag(code) {\n return code.split('-')[0];\n}\n\n/**\n * Finds the closest supported locale to the one provided. This is done in three steps:\n *\n * 1. Returning the locale itself if its exact language code is supported.\n * 2. Returning the primary language subtag of the language code if it is supported (ar for ar-eg,\n * for instance).\n * 3. Returning 'en' if neither of the above produce a supported locale.\n *\n * @param {string} locale\n * @returns {string}\n * @memberof module:Internationalization\n */\nexport function findSupportedLocale(locale) {\n if (messages[locale] !== undefined) {\n return locale;\n }\n\n if (messages[getPrimaryLanguageSubtag(locale)] !== undefined) {\n return getPrimaryLanguageSubtag(locale);\n }\n\n return 'en';\n}\n\n/**\n * Get the locale from the cookie or, failing that, the browser setting.\n * Gracefully fall back to a more general primary language subtag or to English (en)\n * if we don't support that language.\n *\n * @param {string} locale If a locale is provided, returns the closest supported locale. Optional.\n * @throws An error if i18n has not yet been configured.\n * @returns {string}\n * @memberof module:Internationalization\n */\nexport function getLocale(locale) {\n if (messages === null) {\n throw new Error('getLocale called before configuring i18n. Call configure with messages first.');\n }\n // 1. Explicit application request\n if (locale !== undefined) {\n return findSupportedLocale(locale);\n }\n // 2. User setting in cookie\n const cookieLangPref = cookies\n .get(config.LANGUAGE_PREFERENCE_COOKIE_NAME);\n if (cookieLangPref) {\n return findSupportedLocale(cookieLangPref.toLowerCase());\n }\n // 3. Browser language (default)\n // Note that some browers prefer upper case for the region part of the locale, while others don't.\n // Thus the toLowerCase, for consistency.\n // https://developer.mozilla.org/en-US/docs/Web/API/NavigatorLanguage/language\n return findSupportedLocale(global.navigator.language.toLowerCase());\n}\n\n/**\n * Returns messages for the provided locale, or the user's preferred locale if no argument is\n * provided.\n *\n * @param {string} [locale=getLocale()]\n * @memberof module:Internationalization\n */\nexport function getMessages(locale = getLocale()) {\n return messages[locale];\n}\n\n/**\n * Determines if the provided locale is a right-to-left language.\n *\n * @param {string} locale\n * @memberof module:Internationalization\n */\nexport function isRtl(locale) {\n return rtlLocales.includes(locale);\n}\n\n/**\n * Handles applying the RTL stylesheet and \"dir=rtl\" attribute to the html tag if the current locale\n * is a RTL language.\n *\n * @memberof module:Internationalization\n */\nexport function handleRtl() {\n if (isRtl(getLocale())) {\n global.document.getElementsByTagName('html')[0].setAttribute('dir', 'rtl');\n } else {\n global.document.getElementsByTagName('html')[0].setAttribute('dir', 'ltr');\n }\n}\n\nconst messagesShape = {\n ar: PropTypes.objectOf(PropTypes.string), // Arabic\n en: PropTypes.objectOf(PropTypes.string),\n 'es-419': PropTypes.objectOf(PropTypes.string), // Spanish, Latin American\n fr: PropTypes.objectOf(PropTypes.string), // French\n 'zh-cn': PropTypes.objectOf(PropTypes.string), // Chinese, Simplified\n ca: PropTypes.objectOf(PropTypes.string), // Catalan\n he: PropTypes.objectOf(PropTypes.string), // Hebrew\n id: PropTypes.objectOf(PropTypes.string), // Indonesian\n 'ko-kr': PropTypes.objectOf(PropTypes.string), // Korean (Korea)\n pl: PropTypes.objectOf(PropTypes.string), // Polish\n 'pt-br': PropTypes.objectOf(PropTypes.string), // Portuguese (Brazil)\n ru: PropTypes.objectOf(PropTypes.string), // Russian\n th: PropTypes.objectOf(PropTypes.string), // Thai\n uk: PropTypes.objectOf(PropTypes.string), // Ukrainian\n};\n\nconst optionsShape = {\n config: PropTypes.object.isRequired,\n loggingService: PropTypes.shape({\n logError: PropTypes.func.isRequired,\n }).isRequired,\n messages: PropTypes.oneOfType([\n PropTypes.shape(messagesShape),\n PropTypes.arrayOf(PropTypes.shape(messagesShape)),\n ]).isRequired,\n};\n\n/**\n *\n *\n * @param {Array} [messagesArray=[]]\n * @returns {Object}\n * @memberof module:Internationalization\n */\nexport function mergeMessages(messagesArray = []) {\n return Array.isArray(messagesArray) ? merge({}, ...messagesArray) : {};\n}\n\n/**\n * Configures the i18n library with messages for your application.\n *\n * Logs a warning if it detects a locale it doesn't expect (as defined by the supportedLocales list\n * above), or if an expected locale is not provided.\n *\n * @param {Object} options\n * @param {LoggingService} options.loggingService\n * @param {Object} options.config\n * @param {Object} options.messages\n * @memberof module:Internationalization\n */\nexport function configure(options) {\n PropTypes.checkPropTypes(optionsShape, options, 'property', 'i18n');\n // eslint-disable-next-line prefer-destructuring\n loggingService = options.loggingService;\n // eslint-disable-next-line prefer-destructuring\n config = options.config;\n messages = Array.isArray(options.messages) ? mergeMessages(options.messages) : options.messages;\n\n if (config.ENVIRONMENT !== 'production') {\n Object.keys(messages).forEach((key) => {\n if (supportedLocales.indexOf(key) < 0) {\n console.warn(`Unexpected locale: ${key}`); // eslint-disable-line no-console\n }\n });\n\n supportedLocales.forEach((key) => {\n if (messages[key] === undefined) {\n console.warn(`Missing locale: ${key}`); // eslint-disable-line no-console\n }\n });\n }\n\n handleRtl();\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edx/frontend-platform",
3
- "version": "3.4.1",
3
+ "version": "3.5.0",
4
4
  "description": "Foundational application framework for Open edX micro-frontend applications.",
5
5
  "main": "index.js",
6
6
  "publishConfig": {
@@ -42,7 +42,7 @@
42
42
  "enzyme-adapter-react-16": "1.15.7",
43
43
  "husky": "8.0.3",
44
44
  "jsdoc": "3.6.11",
45
- "nodemon": "2.0.20",
45
+ "nodemon": "2.0.21",
46
46
  "prop-types": "15.8.1",
47
47
  "react": "16.14.0",
48
48
  "react-dom": "16.14.0",