UNPKG

@webpro/next-translate-plugin

Version:

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

106 lines (105 loc) 5.09 kB
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; }; import fs from 'fs'; import path from 'path'; import { getDefaultExport, hasHOC, hasStaticName, parseFile, calculatePageDir, existPages, existLocalesFolderWithNamespaces, } from './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.resolve(path.relative(pkgDir(), process.env.NEXT_TRANSLATE_PATH || '.')); var nextConfigI18n = nextConfig.i18n || {}; var _c = require(path.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 = calculatePageDir('pages', pagesInDir, basePath); var appFolder = calculatePageDir('app', pagesInDir, basePath); var existLocalesFolder = existLocalesFolderWithNamespaces(basePath); var existPagesFolder = existPages(basePath, pagesFolder); var hasGetInitialPropsOnAppJs = false; var hasAppJs = false; if (!existPagesFolder && !existPages(basePath, appFolder)) { return nextConfigWithI18n; } if (existPagesFolder) { var pagesPath = path.join(basePath, pagesFolder); var app = fs .readdirSync(pagesPath) .find(function (page) { return page.startsWith('_app.'); }); if (app) { var appPkg = parseFile(basePath, path.join(pagesPath, app)); var defaultExport = getDefaultExport(appPkg); hasAppJs = true; if (defaultExport) { var isGetInitialProps = hasStaticName(appPkg, defaultExport, 'getInitialProps'); hasGetInitialPropsOnAppJs = isGetInitialProps || 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.resolve(basePath) }); if (!loader) return config; config.module.rules.push({ test: test, use: { loader: '@webpro/next-translate-plugin/loader', options: { basePath: basePath, pagesFolder: path.join(pagesFolder, '/').replace(/\\/g, '/'), appFolder: path.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; export default nextTranslate;