UNPKG

@webpro/next-translate-plugin

Version:

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

92 lines (91 loc) 4.74 kB
"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;