@webpro/next-translate-plugin
Version:
Tiny and powerful i18n plugin to translate your Next.js pages.
92 lines (91 loc) • 4.74 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
var path_1 = __importDefault(require("path"));
var templateWithHoc_1 = __importDefault(require("./templateWithHoc"));
var templateWithLoader_1 = __importDefault(require("./templateWithLoader"));
var templateAppDir_1 = __importDefault(require("./templateAppDir"));
var utils_1 = require("./utils");
var REGEX_STARTS_WITH_APP = /\/+_app.*/;
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 = (0, utils_1.removeCommentsFromCode)(rawCode).trim();
var normalizedResourcePath = path_1.default
.join(path_1.default.relative(basePath, this.resourcePath))
.replace(/\\/g, '/');
var isNextInternal = normalizedResourcePath.includes('node_modules/next/dist/');
var isClientComponent = !isNextInternal &&
utils_1.clientLine.some(function (line) { return codeWithoutComments_1.startsWith(line); });
var shouldUseTemplateAppDir = isClientComponent ||
(0, utils_1.isInsideAppDir)(normalizedResourcePath, appFolder, pagesFolder);
var pagesPath = (shouldUseTemplateAppDir ? appFolder : pagesFolder);
if (!hasAppJs &&
normalizedResourcePath.includes('node_modules/next/dist/pages/_app')) {
return (0, utils_1.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 = (0, utils_1.parseFile)(basePath, normalizedResourcePath);
if ((0, utils_1.hasExportName)(pagePkg, '__N_SSP') ||
(0, utils_1.hasExportName)(pagePkg, '__N_SSG')) {
return rawCode;
}
if (shouldUseTemplateAppDir) {
return (0, templateAppDir_1.default)(pagePkg, {
pageNoExt: pageNoExt,
normalizedResourcePath: normalizedResourcePath,
appFolder: appFolder,
isClientComponent: isClientComponent,
code: rawCode,
existLocalesFolder: existLocalesFolder,
});
}
var defaultExport = (0, utils_1.getDefaultExport)(pagePkg);
if (!defaultExport)
return rawCode;
if (hasGetInitialPropsOnAppJs) {
return REGEX_STARTS_WITH_APP.test(pageNoExt)
? (0, templateWithHoc_1.default)(pagePkg, { existLocalesFolder: existLocalesFolder })
: rawCode;
}
if (REGEX_STARTS_WITH_APP.test(pageNoExt)) {
return (0, templateWithHoc_1.default)(pagePkg, {
skipInitialProps: true,
existLocalesFolder: existLocalesFolder,
});
}
if ((0, utils_1.isPageToIgnore)(page))
return rawCode;
var isWrapperWithExternalHOC = (0, utils_1.hasHOC)(pagePkg);
var isDynamicPage = page.includes('[');
var isGetStaticProps = (0, utils_1.hasExportName)(pagePkg, 'getStaticProps');
var isGetStaticPaths = (0, utils_1.hasExportName)(pagePkg, 'getStaticPaths');
var isGetServerSideProps = (0, utils_1.hasExportName)(pagePkg, 'getServerSideProps');
var isGetInitialProps = (0, utils_1.hasStaticName)(pagePkg, defaultExport, 'getInitialProps');
var hasLoader = isGetStaticProps || isGetServerSideProps || isGetInitialProps;
if (isGetInitialProps || (!hasLoader && isWrapperWithExternalHOC)) {
return (0, templateWithHoc_1.default)(pagePkg, { existLocalesFolder: existLocalesFolder });
}
var loader_1 = isGetServerSideProps || (!hasLoader && isDynamicPage && !isGetStaticPaths)
? 'getServerSideProps'
: 'getStaticProps';
return (0, templateWithLoader_1.default)(pagePkg, {
page: pageNoExt,
loader: loader_1,
revalidate: revalidate,
existLocalesFolder: existLocalesFolder,
});
}
catch (e) {
console.error('@webpro/next-translate-plugin ERROR', e);
return rawCode;
}
}
exports.default = loader;