You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
7.3 KiB
179 lines
7.3 KiB
"use strict";
|
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
}) : (function(o, m, k, k2) {
|
|
if (k2 === undefined) k2 = k;
|
|
o[k2] = m[k];
|
|
}));
|
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
}) : function(o, v) {
|
|
o["default"] = v;
|
|
});
|
|
var __importStar = (this && this.__importStar) || function (mod) {
|
|
if (mod && mod.__esModule) return mod;
|
|
var result = {};
|
|
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
__setModuleDefault(result, mod);
|
|
return result;
|
|
};
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.testWebpack5 = exports.genMatchResource = exports.stringifyRequest = exports.getOptions = exports.resolveTemplateTSOptions = exports.needHMR = void 0;
|
|
const querystring_1 = __importDefault(require("querystring"));
|
|
const path = __importStar(require("path"));
|
|
function needHMR(vueLoaderOptions, compilerOptions) {
|
|
var _a;
|
|
const isServer = (_a = vueLoaderOptions.isServerBuild) !== null && _a !== void 0 ? _a : compilerOptions.target === 'node';
|
|
const isProduction = compilerOptions.mode === 'production' ||
|
|
process.env.NODE_ENV === 'production';
|
|
return !isServer && !isProduction && vueLoaderOptions.hotReload !== false;
|
|
}
|
|
exports.needHMR = needHMR;
|
|
function resolveTemplateTSOptions(descriptor, options) {
|
|
var _a, _b, _c;
|
|
if (options.enableTsInTemplate === false)
|
|
return null;
|
|
const lang = ((_a = descriptor.script) === null || _a === void 0 ? void 0 : _a.lang) || ((_b = descriptor.scriptSetup) === null || _b === void 0 ? void 0 : _b.lang);
|
|
const isTS = !!(lang && /tsx?$/.test(lang));
|
|
let expressionPlugins = ((_c = options === null || options === void 0 ? void 0 : options.compilerOptions) === null || _c === void 0 ? void 0 : _c.expressionPlugins) || [];
|
|
if (isTS && !expressionPlugins.includes('typescript')) {
|
|
expressionPlugins = [...expressionPlugins, 'typescript'];
|
|
}
|
|
return {
|
|
isTS,
|
|
expressionPlugins,
|
|
};
|
|
}
|
|
exports.resolveTemplateTSOptions = resolveTemplateTSOptions;
|
|
// loader utils removed getOptions in 3.x, but it's not available on webpack 4
|
|
// loader context
|
|
function getOptions(loaderContext) {
|
|
const query = loaderContext.query;
|
|
if (typeof query === 'string' && query !== '') {
|
|
return parseQuery(query);
|
|
}
|
|
if (!query || typeof query !== 'object') {
|
|
// Not object-like queries are not supported.
|
|
return {};
|
|
}
|
|
return query;
|
|
}
|
|
exports.getOptions = getOptions;
|
|
const specialValues = {
|
|
null: null,
|
|
true: true,
|
|
false: false,
|
|
};
|
|
function parseQuery(query) {
|
|
if (query.substr(0, 1) !== '?') {
|
|
throw new Error("A valid query string passed to parseQuery should begin with '?'");
|
|
}
|
|
query = query.substr(1);
|
|
if (!query) {
|
|
return {};
|
|
}
|
|
if (query.substr(0, 1) === '{' && query.substr(-1) === '}') {
|
|
return JSON.parse(query);
|
|
}
|
|
const queryArgs = query.split(/[,&]/g);
|
|
const result = Object.create(null);
|
|
queryArgs.forEach((arg) => {
|
|
const idx = arg.indexOf('=');
|
|
if (idx >= 0) {
|
|
let name = arg.substr(0, idx);
|
|
let value = decodeURIComponent(arg.substr(idx + 1));
|
|
// eslint-disable-next-line no-prototype-builtins
|
|
if (specialValues.hasOwnProperty(value)) {
|
|
value = specialValues[value];
|
|
}
|
|
if (name.substr(-2) === '[]') {
|
|
name = decodeURIComponent(name.substr(0, name.length - 2));
|
|
if (!Array.isArray(result[name])) {
|
|
result[name] = [];
|
|
}
|
|
result[name].push(value);
|
|
}
|
|
else {
|
|
name = decodeURIComponent(name);
|
|
result[name] = value;
|
|
}
|
|
}
|
|
else {
|
|
if (arg.substr(0, 1) === '-') {
|
|
result[decodeURIComponent(arg.substr(1))] = false;
|
|
}
|
|
else if (arg.substr(0, 1) === '+') {
|
|
result[decodeURIComponent(arg.substr(1))] = true;
|
|
}
|
|
else {
|
|
result[decodeURIComponent(arg)] = true;
|
|
}
|
|
}
|
|
});
|
|
return result;
|
|
}
|
|
const matchRelativePath = /^\.\.?[/\\]/;
|
|
function isAbsolutePath(str) {
|
|
return path.posix.isAbsolute(str) || path.win32.isAbsolute(str);
|
|
}
|
|
function isRelativePath(str) {
|
|
return matchRelativePath.test(str);
|
|
}
|
|
function stringifyRequest(loaderContext, request) {
|
|
const splitted = request.split('!');
|
|
const context = loaderContext.context ||
|
|
// @ts-ignore
|
|
(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.relative(context, singlePath);
|
|
if (isAbsolutePath(singlePath)) {
|
|
// If singlePath still matches an absolute path, singlePath was on a different drive than context.
|
|
// In this case, we leave the path platform-specific without replacing any separators.
|
|
// @see https://github.com/webpack/loader-utils/pull/14
|
|
return singlePath + query;
|
|
}
|
|
if (isRelativePath(singlePath) === false) {
|
|
// Ensure that the relative path starts at least with ./ otherwise it would be a request into the modules directory (like node_modules).
|
|
singlePath = './' + singlePath;
|
|
}
|
|
}
|
|
return singlePath.replace(/\\/g, '/') + query;
|
|
})
|
|
.join('!'));
|
|
}
|
|
exports.stringifyRequest = stringifyRequest;
|
|
function genMatchResource(context, resourcePath, resourceQuery, lang) {
|
|
resourceQuery = resourceQuery || '';
|
|
const loaders = [];
|
|
const parsedQuery = querystring_1.default.parse(resourceQuery.slice(1));
|
|
// process non-external resources
|
|
if ('vue' in parsedQuery && !('external' in parsedQuery)) {
|
|
const currentRequest = context.loaders
|
|
.slice(context.loaderIndex)
|
|
.map((obj) => obj.request);
|
|
loaders.push(...currentRequest);
|
|
}
|
|
const loaderString = loaders.join('!');
|
|
return `${resourcePath}${lang ? `.${lang}` : ''}${resourceQuery}!=!${loaderString ? `${loaderString}!` : ''}${resourcePath}${resourceQuery}`;
|
|
}
|
|
exports.genMatchResource = genMatchResource;
|
|
const testWebpack5 = (compiler) => {
|
|
var _a;
|
|
if (!compiler) {
|
|
return false;
|
|
}
|
|
const webpackVersion = (_a = compiler === null || compiler === void 0 ? void 0 : compiler.webpack) === null || _a === void 0 ? void 0 : _a.version;
|
|
return Boolean(webpackVersion && Number(webpackVersion.split('.')[0]) > 4);
|
|
};
|
|
exports.testWebpack5 = testWebpack5;
|