123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- 'use strict';
- const scriptLoader = require('./scriptLoader.cjs');
- const url = require('url');
- const promises = require('fs/promises');
- const path = require('upath');
- const mkdirp = require('mkdirp');
- const loaderShared = require('@vuetify/loader-shared');
- function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
- const path__default = /*#__PURE__*/_interopDefaultCompat(path);
- const mkdirp__default = /*#__PURE__*/_interopDefaultCompat(mkdirp);
- var __defProp = Object.defineProperty;
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
- var __publicField = (obj, key, value) => {
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
- return value;
- };
- function isSubdir(root, test) {
- const relative = path__default.relative(root, test);
- return relative && !relative.startsWith("..") && !path__default.isAbsolute(relative);
- }
- class VuetifyPlugin {
- constructor(options) {
- __publicField(this, "options");
- this.options = {
- autoImport: true,
- styles: true,
- ...options
- };
- }
- async apply(compiler) {
- if (this.options.autoImport) {
- compiler.options.module.rules.unshift({
- resourceQuery: (query) => {
- if (!query)
- return false;
- const qs = new url.URLSearchParams(query);
- return qs.has("vue") && (qs.get("type") === "template" || qs.get("type") === "script" && qs.has("setup"));
- },
- use: {
- loader: "webpack-plugin-vuetify/scriptLoader",
- options: this.options
- }
- });
- }
- const vueLoader = compiler.options.module.rules.find((rule) => {
- return rule && typeof rule !== "string" && rule.loader && path__default.toUnix(rule.loader).endsWith("vue-loader/dist/templateLoader.js");
- });
- const vueOptions = typeof vueLoader === "object" && vueLoader?.options;
- if (vueOptions && typeof vueOptions === "object") {
- vueOptions.transformAssetUrls ?? (vueOptions.transformAssetUrls = loaderShared.transformAssetUrls);
- }
- const vuetifyBase = loaderShared.resolveVuetifyBase();
- function hookResolve(transform) {
- compiler.resolverFactory.hooks.resolver.for("normal").tap("vuetify-loader", (resolver) => {
- resolver.getHook("beforeResult").tapAsync("vuetify-loader", async (request, context, callback) => {
- if (request.path && request.path.endsWith(".css") && isSubdir(vuetifyBase, request.path)) {
- request.path = await transform(request.path);
- }
- callback(null, request);
- });
- });
- }
- if (this.options.styles === "none") {
- compiler.options.module.rules.push({
- enforce: "pre",
- test: /\.css$/,
- include: /node_modules[/\\]vuetify[/\\]/,
- issuer: /node_modules[/\\]vuetify[/\\]/,
- loader: "null-loader"
- });
- } else if (this.options.styles === "sass") {
- hookResolve((file) => file.replace(/\.css$/, ".sass"));
- } else if (loaderShared.isObject(this.options.styles)) {
- const findCacheDir = (await import('find-cache-dir')).default;
- const cacheDir = findCacheDir({
- name: "vuetify",
- create: true
- });
- const configFile = path__default.isAbsolute(this.options.styles.configFile) ? this.options.styles.configFile : path__default.join(
- compiler.options.context || process.cwd(),
- this.options.styles.configFile
- );
- hookResolve(async (request) => {
- const target = request.replace(/\.css$/, ".sass");
- const file = path__default.relative(vuetifyBase, target);
- const cacheFile = path__default.join(cacheDir, file);
- await mkdirp__default(path__default.dirname(cacheFile));
- await promises.writeFile(cacheFile, `@use "${loaderShared.normalizePath(configFile)}"
- @use "${loaderShared.normalizePath(target)}"`);
- return cacheFile;
- });
- }
- }
- }
- __publicField(VuetifyPlugin, "transformAssetUrls", loaderShared.transformAssetUrls);
- exports.VuetifyLoader = scriptLoader.default;
- exports.transformAssetUrls = loaderShared.transformAssetUrls;
- exports.VuetifyPlugin = VuetifyPlugin;
|