@webpro/next-translate-plugin
Version:
Tiny and powerful i18n plugin to translate your Next.js pages.
86 lines (85 loc) • 4.29 kB
JavaScript
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;
}
}