123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.contextify = contextify;
- exports.getExposes = getExposes;
- exports.getNewUserRequest = getNewUserRequest;
- exports.interpolateName = interpolateName;
- exports.stringifyRequest = stringifyRequest;
- var _path = _interopRequireDefault(require("path"));
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function getNewUserRequest(request) {
- const splittedRequest = request.split("!");
- const lastPartRequest = splittedRequest.pop().split("?", 2);
- const pathObject = _path.default.parse(lastPartRequest[0]);
- pathObject.base = `${_path.default.basename(pathObject.base, pathObject.ext)}-exposed${pathObject.ext}`;
- lastPartRequest[0] = _path.default.format(pathObject);
- splittedRequest.push(lastPartRequest.join("?"));
- return splittedRequest.join("!");
- }
- function splitCommand(command) {
- const result = command.split("|").map(item => item.split(" ")).reduce((acc, val) => acc.concat(val), []);
- for (const item of result) {
- if (!item) {
- throw new Error(`Invalid command "${item}" in "${command}" for expose. There must be only one separator: " ", or "|".`);
- }
- }
- return result;
- }
- function parseBoolean(string, defaultValue = null) {
- if (typeof string === "undefined") {
- return defaultValue;
- }
- switch (string.toLowerCase()) {
- case "true":
- return true;
- case "false":
- return false;
- default:
- return defaultValue;
- }
- }
- function resolveExposes(item) {
- let result;
- if (typeof item === "string") {
- const splittedItem = splitCommand(item.trim());
- if (splittedItem.length > 3) {
- throw new Error(`Invalid "${item}" for exposes`);
- }
- result = {
- globalName: splittedItem[0],
- moduleLocalName: splittedItem[1],
- override: typeof splittedItem[2] !== "undefined" ? parseBoolean(splittedItem[2], false) :
- // eslint-disable-next-line no-undefined
- undefined
- };
- } else {
- result = item;
- }
- const nestedGlobalName = typeof result.globalName === "string" ? result.globalName.split(".") : result.globalName;
- return {
- ...result,
- globalName: nestedGlobalName
- };
- }
- function getExposes(items) {
- let result;
- const exposeItems = typeof items === "string" && items.includes(",") ? items.split(",") : items;
- if (typeof exposeItems === "string") {
- result = [resolveExposes(exposeItems)];
- } else {
- result = [].concat(exposeItems).map(item => resolveExposes(item));
- }
- return result;
- }
- // TODO simplify for the next major release
- function contextify(loaderContext, context, request) {
- if (typeof loaderContext.utils !== "undefined" && typeof loaderContext.utils.contextify === "function") {
- loaderContext.utils.contextify(loaderContext.context, request);
- }
- return request.split("!").map(r => {
- const splitPath = r.split("?");
- if (/^[a-zA-Z]:\\/.test(splitPath[0])) {
- splitPath[0] = _path.default.win32.relative(context, splitPath[0]);
- if (!/^[a-zA-Z]:\\/.test(splitPath[0])) {
- splitPath[0] = splitPath[0].replace(/\\/g, "/");
- }
- }
- if (/^\//.test(splitPath[0])) {
- splitPath[0] = _path.default.posix.relative(context, splitPath[0]);
- }
- if (!/^(\.\.\/|\/|[a-zA-Z]:\\)/.test(splitPath[0])) {
- splitPath[0] = `./${splitPath[0]}`;
- }
- return splitPath.join("?");
- }).join("!");
- }
- function isAbsolutePath(str) {
- return _path.default.posix.isAbsolute(str) || _path.default.win32.isAbsolute(str);
- }
- // TODO simplify for the next major release
- function stringifyRequest(loaderContext, request) {
- if (typeof loaderContext.utils !== "undefined" && typeof loaderContext.utils.contextify === "function") {
- return JSON.stringify(loaderContext.utils.contextify(loaderContext.context, request));
- }
- const splitted = request.split("!");
- const context = loaderContext.context || loaderContext.options && loaderContext.options.context;
- return JSON.stringify(splitted.map(part => {
- // First, separate singlePath from query, because the query might contain paths again
- const splittedPart = part.match(/^(.*?)(\?.*)/);
- const query = splittedPart ? splittedPart[2] : "";
- let singlePath = splittedPart ? splittedPart[1] : part;
- if (isAbsolutePath(singlePath) && context) {
- singlePath = _path.default.relative(context, singlePath);
- }
- return singlePath.replace(/\\/g, "/") + query;
- }).join("!"));
- }
- function interpolateName(loaderContext, filename) {
- let basename = "file";
- if (loaderContext.resourcePath) {
- const parsed = _path.default.parse(loaderContext.resourcePath);
- if (parsed.dir) {
- basename = parsed.name;
- }
- }
- return filename.replace(/\[name\]/gi, () => basename);
- }
|