@webpro/next-translate-plugin
Version:
Tiny and powerful i18n plugin to translate your Next.js pages.
111 lines (110 loc) • 5.45 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;
};
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;