UNPKG

next-i18next

Version:

The easiest way to translate your NextJs apps.

115 lines (86 loc) 3.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); require("core-js/modules/es.array.concat"); require("core-js/modules/es.array.for-each"); require("core-js/modules/es.array.includes"); require("core-js/modules/es.object.values"); require("core-js/modules/es.regexp.exec"); require("core-js/modules/es.string.includes"); require("core-js/modules/es.string.replace"); require("core-js/modules/es.string.search"); require("core-js/modules/web.dom-collections.for-each"); Object.defineProperty(exports, "__esModule", { value: true }); exports.lngPathCorrector = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _url = require("url"); var _index = require("./index"); var parseAs = function parseAs(originalAs, href) { var asType = (0, _typeof2["default"])(originalAs); var as; if (asType === 'undefined') { as = (0, _url.format)(href, { unicode: true }); } else if (asType === 'string') { as = originalAs; } else { throw new Error("'as' type must be 'string', but it is ".concat(asType)); } return as; }; var parseHref = function parseHref(originalHref) { var hrefType = (0, _typeof2["default"])(originalHref); var href; if (hrefType === 'string') { href = (0, _url.parse)(originalHref, true /* parseQueryString */ ); } else if (hrefType === 'object') { href = (0, _objectSpread2["default"])({}, originalHref); href.query = originalHref.query ? (0, _objectSpread2["default"])({}, originalHref.query) : {}; } else { throw new Error("'href' type must be either 'string' or 'object', but it is ".concat(hrefType)); } return href; }; var lngPathCorrector = function lngPathCorrector(config, currentRoute, currentLanguage) { var allLanguages = config.allLanguages, localeSubpaths = config.localeSubpaths; var originalAs = currentRoute.as, originalHref = currentRoute.href; if (!allLanguages.includes(currentLanguage)) { throw new Error('Invalid configuration: Current language is not included in all languages array'); } var href = parseHref(originalHref); var as = parseAs(originalAs, href); /* url.format prefers the 'url.search' string over the 'url.query' object, so remove the search string to ensure the query object is used. */ delete href.search; /* Strip any/all subpaths from the `as` value */ Object.values(localeSubpaths).forEach(function (subpath) { if ((0, _index.subpathIsPresent)(as, subpath)) { as = (0, _index.removeSubpath)(as, subpath); } }); if ((0, _index.subpathIsRequired)(config, currentLanguage)) { var basePath = "".concat(href.protocol, "//").concat(href.host); var currentAs = as.replace(basePath, ''); var subpath = (0, _index.subpathFromLng)(config, currentLanguage); as = "/".concat(subpath).concat(currentAs).replace(/\/$/, ''); href.query.lng = currentLanguage; href.query.subpath = subpath; } return { as: as, href: href }; }; exports.lngPathCorrector = lngPathCorrector;