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