index.cjs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. 'use strict';
  2. const node_module = require('node:module');
  3. const path = require('upath');
  4. const vue = require('vue');
  5. var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
  6. function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
  7. const path__default = /*#__PURE__*/_interopDefaultCompat(path);
  8. function parseTemplate(source) {
  9. const components = createSet(source.matchAll(/(?:var|const) (\w+) = _resolveComponent\("([\w-.]+)"\);?/gm));
  10. const directives = createSet(source.matchAll(/(?:var|const) (\w+) = _resolveDirective\("([\w-.]+)"\);?/gm));
  11. return { components, directives };
  12. }
  13. function createSet(matches) {
  14. return new Set(Array.from(matches, (i) => ({
  15. symbol: i[1],
  16. name: vue.capitalize(vue.camelize(i[2])),
  17. index: i.index,
  18. length: i[0].length
  19. })));
  20. }
  21. const require$2 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
  22. const importMap = require$2("vuetify/dist/json/importMap.json");
  23. const importMapLabs = require$2("vuetify/dist/json/importMap-labs.json");
  24. function getImports(source, options) {
  25. const { components, directives } = parseTemplate(source);
  26. const resolvedComponents = [];
  27. const resolvedDirectives = [];
  28. const imports = /* @__PURE__ */ new Map();
  29. const ignore = isObject(options.autoImport) && options.autoImport.ignore || null;
  30. const includeLabs = isObject(options.autoImport) && options.autoImport.labs;
  31. const map = includeLabs ? {
  32. components: { ...importMap.components, ...importMapLabs.components },
  33. directives: importMap.directives
  34. } : importMap;
  35. if (components.size || directives.size) {
  36. components.forEach((component) => {
  37. if (ignore?.includes(component.name))
  38. return;
  39. if (component.name in importMap.components) {
  40. resolvedComponents.push(component);
  41. } else if (includeLabs && component.name in importMapLabs.components) {
  42. resolvedComponents.push(component);
  43. }
  44. });
  45. directives.forEach((directive) => {
  46. if (importMap.directives.includes(directive.name) && !ignore?.includes(directive.name)) {
  47. resolvedDirectives.push(directive);
  48. }
  49. });
  50. }
  51. resolvedComponents.forEach((component) => {
  52. addImport(imports, component.name, component.symbol, "vuetify/lib/" + map.components[component.name].from);
  53. });
  54. resolvedDirectives.forEach((directive) => {
  55. addImport(imports, directive.name, directive.symbol, "vuetify/lib/directives/index.mjs");
  56. });
  57. return {
  58. imports,
  59. components: resolvedComponents,
  60. directives: resolvedDirectives
  61. };
  62. }
  63. function addImport(imports, name, as, from) {
  64. if (!imports.has(from)) {
  65. imports.set(from, []);
  66. }
  67. imports.get(from).push(`${name} as ${as}`);
  68. }
  69. function generateImports(source, options) {
  70. const { imports, components, directives } = getImports(source, options);
  71. let code = "";
  72. if (components.length || directives.length) {
  73. code += "\n\n/* Vuetify */\n";
  74. Array.from(imports).sort((a, b) => a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0).forEach(([from, names]) => {
  75. code += `import { ${names.join(", ")} } from "${from}"
  76. `;
  77. });
  78. code += "\n";
  79. source = [...components, ...directives].reduce((acc, v) => {
  80. return acc.slice(0, v.index) + " ".repeat(v.length) + acc.slice(v.index + v.length);
  81. }, source);
  82. if (!source.includes("_resolveComponent(")) {
  83. source = source.replace("resolveComponent as _resolveComponent, ", "");
  84. }
  85. if (!source.includes("_resolveDirective(")) {
  86. source = source.replace("resolveDirective as _resolveDirective, ", "");
  87. }
  88. }
  89. return { code, source };
  90. }
  91. const require$1 = node_module.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href)));
  92. function resolveVuetifyBase() {
  93. return path__default.dirname(require$1.resolve("vuetify/package.json", { paths: [process.cwd()] }));
  94. }
  95. function isObject(value) {
  96. return value !== null && typeof value === "object";
  97. }
  98. function includes(arr, val) {
  99. return arr.includes(val);
  100. }
  101. function normalizePath(p) {
  102. p = path__default.normalize(p);
  103. return /^[a-z]:\//i.test(p) ? "/" + p : p;
  104. }
  105. function toKebabCase(str = "") {
  106. return str.replace(/[^a-z]/gi, "-").replace(/\B([A-Z])/g, "-$1").toLowerCase();
  107. }
  108. const defaultTags = {
  109. video: ["src", "poster"],
  110. source: ["src"],
  111. img: ["src"],
  112. image: ["xlink:href", "href"],
  113. use: ["xlink:href", "href"]
  114. };
  115. const transformAssetUrls = {
  116. VAppBar: ["image"],
  117. VAvatar: ["image"],
  118. VBanner: ["avatar"],
  119. VCard: ["image", "prependAvatar", "appendAvatar"],
  120. VCardItem: ["prependAvatar", "appendAvatar"],
  121. VCarouselItem: ["src", "lazySrc", "srcset"],
  122. VChip: ["prependAvatar", "appendAvatar"],
  123. VImg: ["src", "lazySrc", "srcset"],
  124. VListItem: ["prependAvatar", "appendAvatar"],
  125. VNavigationDrawer: ["image"],
  126. VParallax: ["src", "lazySrc", "srcset"],
  127. VToolbar: ["image"]
  128. };
  129. for (const [tag, attrs] of Object.entries(transformAssetUrls)) {
  130. attrs.forEach((attr) => {
  131. if (/[A-Z]/.test(attr)) {
  132. attrs.push(toKebabCase(attr));
  133. }
  134. });
  135. transformAssetUrls[toKebabCase(tag)] = attrs;
  136. }
  137. Object.assign(transformAssetUrls, defaultTags);
  138. exports.generateImports = generateImports;
  139. exports.includes = includes;
  140. exports.isObject = isObject;
  141. exports.normalizePath = normalizePath;
  142. exports.resolveVuetifyBase = resolveVuetifyBase;
  143. exports.toKebabCase = toKebabCase;
  144. exports.transformAssetUrls = transformAssetUrls;