next-translate-routes-multi-domain
Version:
Flexible and translated routes for Next.js without custom server
81 lines • 3.46 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);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.enhanceNextRouter = void 0;
var querystring_1 = require("querystring");
var withNtrPrefix_1 = require("../shared/withNtrPrefix");
var fileUrlToUrl_1 = require("./fileUrlToUrl");
var getLocale_1 = require("./getLocale");
var ntrData_1 = require("./ntrData");
var urlToFileUrl_1 = require("./urlToFileUrl");
var logWithTrace = function (from, details) {
console.groupCollapsed(withNtrPrefix_1.ntrMessagePrefix + from, details);
console.trace('Stringified:\n', JSON.stringify(details, null, 4));
console.groupEnd();
};
var enhancePushReplace = function (router, fnName) {
return function (url, as, options) {
var locale = (0, getLocale_1.getLocale)(router, options === null || options === void 0 ? void 0 : options.locale);
var parsedUrl = typeof url === 'string' ? (0, urlToFileUrl_1.urlToFileUrl)(url, locale) : url;
var translatedUrl = as;
if (!as && parsedUrl) {
try {
translatedUrl = (0, fileUrlToUrl_1.fileUrlToUrl)(parsedUrl, locale);
}
catch (_a) {
// Url is wrong
}
}
if ((0, ntrData_1.getNtrData)().debug) {
logWithTrace("router.".concat(fnName), {
url: url,
as: as,
options: options,
translatedUrl: translatedUrl,
parsedUrl: parsedUrl,
locale: locale,
});
}
return router[fnName](parsedUrl || url, translatedUrl, options);
};
};
var enhancePrefetch = function (router) {
return function (inputUrl, asPath, options) {
var locale = (0, getLocale_1.getLocale)(router, options === null || options === void 0 ? void 0 : options.locale);
var parsedInputUrl = (0, urlToFileUrl_1.urlToFileUrl)(inputUrl, locale);
if ((0, ntrData_1.getNtrData)().debug === 'withPrefetch') {
logWithTrace('router.prefetch', { inputUrl: inputUrl, asPath: asPath, options: options, parsedInputUrl: parsedInputUrl, locale: locale });
}
return router.prefetch(parsedInputUrl
? parsedInputUrl.pathname + (parsedInputUrl.query && "?".concat((0, querystring_1.stringify)(parsedInputUrl.query)))
: inputUrl, asPath, options);
};
};
var enhanceNextRouter = function (router) {
if ('router' in router) {
return new Proxy(router, {
get: function (target, p) {
if (p === 'push' || p === 'replace') {
return enhancePushReplace(target, p);
}
if (p === 'prefetch') {
return enhancePrefetch(target);
}
return target[p];
},
});
}
return __assign(__assign({}, router), { push: enhancePushReplace(router, 'push'), replace: enhancePushReplace(router, 'replace'), prefetch: enhancePrefetch(router) });
};
exports.enhanceNextRouter = enhanceNextRouter;
//# sourceMappingURL=enhanceNextRouter.js.map