utils.js 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. var specFileOrFolderRgx = /(__mocks__|__tests__)|(\.(spec|test)\.(tsx|ts|js|jsx)$)/;
  2. export var clearCommentsRgx = /\/\*[\s\S]*?\*\/|\/\/.*/g;
  3. export var defaultLoader = '(l, n) => import(`@next-translate-root/locales/${l}/${n}`).then(m => m.default)';
  4. export function getDefaultAppJs(hasLoadLocaleFrom) {
  5. return "\n import i18nConfig from '@next-translate-root/i18n'\n import appWithI18n from 'next-translate/appWithI18n'\n\n function MyApp({ Component, pageProps }) {\n return <Component {...pageProps} />\n }\n\n export default appWithI18n(MyApp, {\n ...i18nConfig,\n skipInitialProps: true,\n isLoader: true,\n ".concat(overwriteLoadLocales(hasLoadLocaleFrom), "\n })\n");
  6. }
  7. export function overwriteLoadLocales(exist) {
  8. if (exist)
  9. return '';
  10. return "loadLocaleFrom: ".concat(defaultLoader, ",");
  11. }
  12. export function hasExportName(data, name) {
  13. return Boolean(data.match(new RegExp("export +(const|var|let|async +function|function) +".concat(name))) ||
  14. data.match(new RegExp("export\\s*\\{[^}]*(?<!\\w)".concat(name, "(?!\\w)[^}]*\\}"), 'm')));
  15. }
  16. export function isPageToIgnore(pageFilePath) {
  17. var fileName = pageFilePath.substring(pageFilePath.lastIndexOf('/') + 1);
  18. return (pageFilePath.startsWith('/api/') ||
  19. pageFilePath.startsWith('/_document.') ||
  20. pageFilePath.startsWith('/middleware.') ||
  21. fileName.startsWith('_middleware.') ||
  22. specFileOrFolderRgx.test(pageFilePath));
  23. }
  24. export function hasHOC(rawData) {
  25. var hasWithTranslationHOC = new RegExp('import *(\\w*) *.*from *.*next-translate\\/withTranslation.*');
  26. if (!rawData.includes('export default'))
  27. return false;
  28. if (hasExportName(rawData, 'getStaticProps') ||
  29. hasExportName(rawData, 'getServerSideProps') ||
  30. hasExportName(rawData, 'getStaticPaths')) {
  31. return false;
  32. }
  33. var _a = rawData.match(hasWithTranslationHOC) || [], withTranslationName = _a[1];
  34. var data = rawData
  35. .replace(new RegExp("".concat(withTranslationName, "\\(.*\\)")), function (d) {
  36. return d.replace(new RegExp("(".concat(withTranslationName, "|\\(|\\))"), 'g'), '');
  37. })
  38. .replace(clearCommentsRgx, '');
  39. var exportedNormally = new RegExp("export default (\\(.*\\) *=>|function|class)").test(data);
  40. if (exportedNormally)
  41. return false;
  42. var ref = getRef(data);
  43. if (ref.includes('('))
  44. return true;
  45. return (data.split('\n').filter(function (line) {
  46. var isRefLine = line.includes(ref) && !/export +default/.test(line);
  47. var isComp = new RegExp("(function|class) +".concat(ref, "\\W")).test(line);
  48. var isCompInVar = new RegExp(" *".concat(ref, " += +(function|class) +")).test(line);
  49. var isArrowFunc = new RegExp(" *".concat(ref, "(: *\\w+ *)? += +\\(.*=>")).test(line);
  50. var isPotentialHOC = /=.*\(/.test(line);
  51. return (isRefLine && !isComp && !isCompInVar && !isArrowFunc && isPotentialHOC);
  52. }).length > 0);
  53. }
  54. function getRef(data) {
  55. var escapeRegex = function (str) {
  56. return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
  57. };
  58. var ref = (data.replace(/ /g, '').match("exportdefault*([^\\n|;]*)") ||
  59. [])[1];
  60. var prevRef = (data.match(new RegExp("".concat(escapeRegex(ref), " += +(\\w+)($| |;|\\n)"))) || [])[1];
  61. return prevRef || ref;
  62. }