UNPKG

@webpro/next-translate-plugin

Version:

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

111 lines (110 loc) 5.45 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); var fs_1 = __importDefault(require("fs")); var path_1 = __importDefault(require("path")); var utils_1 = require("./utils"); var test = /\.(tsx|ts|js|mjs|jsx)$/; function nextTranslate(config) { var _a; if (config === void 0) { config = {}; } var _b = config.nextTranslate, nextTranslate = _b === void 0 ? {} : _b, nextConfig = __rest(config, ["nextTranslate"]); var basePath = (_a = nextTranslate.basePath) !== null && _a !== void 0 ? _a : path_1.default.resolve(path_1.default.relative(pkgDir(), process.env.NEXT_TRANSLATE_PATH || '.')); var nextConfigI18n = nextConfig.i18n || {}; var _c = require(path_1.default.join(basePath, 'i18n')), _d = _c.locales, locales = _d === void 0 ? nextConfigI18n.locales || [] : _d, _e = _c.defaultLocale, defaultLocale = _e === void 0 ? nextConfigI18n.defaultLocale || 'en' : _e, _f = _c.domains, domains = _f === void 0 ? nextConfigI18n.domains : _f, _g = _c.localeDetection, localeDetection = _g === void 0 ? nextConfigI18n.localeDetection : _g, _h = _c.loader, loader = _h === void 0 ? true : _h, pagesInDir = _c.pagesInDir, _j = _c.extensionsRgx, extensionsRgx = _j === void 0 ? test : _j, _k = _c.revalidate, revalidate = _k === void 0 ? 0 : _k; var nextConfigWithI18n = __assign(__assign({}, nextConfig), { i18n: { locales: locales, defaultLocale: defaultLocale, domains: domains, localeDetection: localeDetection, } }); var pagesFolder = (0, utils_1.calculatePageDir)('pages', pagesInDir, basePath); var appFolder = (0, utils_1.calculatePageDir)('app', pagesInDir, basePath); var existLocalesFolder = (0, utils_1.existLocalesFolderWithNamespaces)(basePath); var existPagesFolder = (0, utils_1.existPages)(basePath, pagesFolder); var hasGetInitialPropsOnAppJs = false; var hasAppJs = false; if (!existPagesFolder && !(0, utils_1.existPages)(basePath, appFolder)) { return nextConfigWithI18n; } if (existPagesFolder) { var pagesPath = path_1.default.join(basePath, pagesFolder); var app = fs_1.default .readdirSync(pagesPath) .find(function (page) { return page.startsWith('_app.'); }); if (app) { var appPkg = (0, utils_1.parseFile)(basePath, path_1.default.join(pagesPath, app)); var defaultExport = (0, utils_1.getDefaultExport)(appPkg); hasAppJs = true; if (defaultExport) { var isGetInitialProps = (0, utils_1.hasStaticName)(appPkg, defaultExport, 'getInitialProps'); hasGetInitialPropsOnAppJs = isGetInitialProps || (0, utils_1.hasHOC)(appPkg); } } } return __assign(__assign({}, nextConfigWithI18n), { webpack: function (conf, options) { var config = typeof nextConfig.webpack === 'function' ? nextConfig.webpack(conf, options) : conf; if (!config.resolve) config.resolve = {}; if (!config.module) config.module = {}; if (!config.module.rules) config.module.rules = []; config.resolve.alias = __assign(__assign({}, (config.resolve.alias || {})), { '@next-translate-root': path_1.default.resolve(basePath) }); if (!loader) return config; config.module.rules.push({ test: test, use: { loader: '@webpro/next-translate-plugin/loader', options: { basePath: basePath, pagesFolder: path_1.default.join(pagesFolder, '/').replace(/\\/g, '/'), appFolder: path_1.default.join(appFolder, '/').replace(/\\/g, '/'), hasAppJs: hasAppJs, hasGetInitialPropsOnAppJs: hasGetInitialPropsOnAppJs, extensionsRgx: extensionsRgx, revalidate: revalidate, existLocalesFolder: existLocalesFolder, }, }, }); return config; } }); } function pkgDir() { try { return require('pkg-dir').sync() || process.cwd(); } catch (e) { return process.cwd(); } } module.exports = nextTranslate; exports.default = nextTranslate;