UNPKG

@webpro/next-translate-plugin

Version:

Tiny and powerful i18n plugin to translate your Next.js pages.

86 lines (85 loc) 4.29 kB
import path from 'path'; import templateWithHoc from './templateWithHoc'; import templateWithLoader from './templateWithLoader'; import templateAppDir from './templateAppDir'; import { parseFile, getDefaultAppJs, getDefaultExport, hasExportName, hasStaticName, isPageToIgnore, hasHOC, removeCommentsFromCode, clientLine, isInsideAppDir, } from './utils'; var REGEX_STARTS_WITH_APP = /\/+_app.*/; export default function loader(rawCode) { var _a = this.getOptions(), basePath = _a.basePath, pagesFolder = _a.pagesFolder, appFolder = _a.appFolder, hasAppJs = _a.hasAppJs, hasGetInitialPropsOnAppJs = _a.hasGetInitialPropsOnAppJs, extensionsRgx = _a.extensionsRgx, revalidate = _a.revalidate, existLocalesFolder = _a.existLocalesFolder; try { var codeWithoutComments_1 = removeCommentsFromCode(rawCode).trim(); var normalizedResourcePath = path .join(path.relative(basePath, this.resourcePath)) .replace(/\\/g, '/'); var isNextInternal = normalizedResourcePath.includes('node_modules/next/dist/'); var isClientComponent = !isNextInternal && clientLine.some(function (line) { return codeWithoutComments_1.startsWith(line); }); var shouldUseTemplateAppDir = isClientComponent || isInsideAppDir(normalizedResourcePath, appFolder, pagesFolder); var pagesPath = (shouldUseTemplateAppDir ? appFolder : pagesFolder); if (!hasAppJs && normalizedResourcePath.includes('node_modules/next/dist/pages/_app')) { return getDefaultAppJs(existLocalesFolder); } if (normalizedResourcePath.includes('node_modules/')) return rawCode; if (!shouldUseTemplateAppDir && !normalizedResourcePath.includes(pagesPath)) return rawCode; var page = normalizedResourcePath.replace(pagesPath, '/'); var pageNoExt = page.replace(extensionsRgx, ''); var pagePkg = parseFile(basePath, normalizedResourcePath); if (hasExportName(pagePkg, '__N_SSP') || hasExportName(pagePkg, '__N_SSG')) { return rawCode; } if (shouldUseTemplateAppDir) { return templateAppDir(pagePkg, { pageNoExt: pageNoExt, normalizedResourcePath: normalizedResourcePath, appFolder: appFolder, isClientComponent: isClientComponent, code: rawCode, existLocalesFolder: existLocalesFolder, }); } var defaultExport = getDefaultExport(pagePkg); if (!defaultExport) return rawCode; if (hasGetInitialPropsOnAppJs) { return REGEX_STARTS_WITH_APP.test(pageNoExt) ? templateWithHoc(pagePkg, { existLocalesFolder: existLocalesFolder }) : rawCode; } if (REGEX_STARTS_WITH_APP.test(pageNoExt)) { return templateWithHoc(pagePkg, { skipInitialProps: true, existLocalesFolder: existLocalesFolder, }); } if (isPageToIgnore(page)) return rawCode; var isWrapperWithExternalHOC = hasHOC(pagePkg); var isDynamicPage = page.includes('['); var isGetStaticProps = hasExportName(pagePkg, 'getStaticProps'); var isGetStaticPaths = hasExportName(pagePkg, 'getStaticPaths'); var isGetServerSideProps = hasExportName(pagePkg, 'getServerSideProps'); var isGetInitialProps = hasStaticName(pagePkg, defaultExport, 'getInitialProps'); var hasLoader = isGetStaticProps || isGetServerSideProps || isGetInitialProps; if (isGetInitialProps || (!hasLoader && isWrapperWithExternalHOC)) { return templateWithHoc(pagePkg, { existLocalesFolder: existLocalesFolder }); } var loader_1 = isGetServerSideProps || (!hasLoader && isDynamicPage && !isGetStaticPaths) ? 'getServerSideProps' : 'getStaticProps'; return templateWithLoader(pagePkg, { page: pageNoExt, loader: loader_1, revalidate: revalidate, existLocalesFolder: existLocalesFolder, }); } catch (e) { console.error('@webpro/next-translate-plugin ERROR', e); return rawCode; } }