vue
This commit is contained in:
233
vite-plugin-transform-imports.js
Normal file
233
vite-plugin-transform-imports.js
Normal file
@@ -0,0 +1,233 @@
|
||||
export default function customTransformImports() {
|
||||
const primeVueMap = {
|
||||
'config': 'Config',
|
||||
|
||||
'button': 'Button',
|
||||
'dialog': 'Dialog',
|
||||
'dropdown': 'Dropdown',
|
||||
'datatable': 'DataTable',
|
||||
'inputtext': 'InputText',
|
||||
'calendar': 'Calendar',
|
||||
'checkbox': 'Checkbox',
|
||||
'radiobutton': 'RadioButton',
|
||||
'textarea': 'Textarea',
|
||||
'toast': 'Toast',
|
||||
'panel': 'Panel',
|
||||
'menu': 'Menu',
|
||||
'tabview': 'TabView',
|
||||
'tabpanel': 'TabPanel',
|
||||
'accordion': 'Accordion',
|
||||
'accordiontab': 'AccordionTab',
|
||||
'card': 'Card',
|
||||
'chart': 'Chart',
|
||||
'confirmdialog': 'ConfirmDialog',
|
||||
'toolbar': 'Toolbar',
|
||||
'paginator': 'Paginator',
|
||||
'fieldset': 'Fieldset',
|
||||
'splitter': 'Splitter',
|
||||
'splitterpanel': 'SplitterPanel',
|
||||
'slider': 'Slider',
|
||||
'message': 'Message',
|
||||
'avatar': 'Avatar',
|
||||
'badge': 'Badge',
|
||||
'chip': 'Chip',
|
||||
'divider': 'Divider',
|
||||
'progressbar': 'ProgressBar',
|
||||
'progressspinner': 'ProgressSpinner',
|
||||
'tag': 'Tag',
|
||||
'skeleton': 'Skeleton',
|
||||
'contextmenu': 'ContextMenu',
|
||||
|
||||
'toastservice': 'ToastService',
|
||||
'confirmationservice': 'ConfirmationService',
|
||||
'dialogservice': 'DialogService',
|
||||
|
||||
'styleclass': 'StyleClass',
|
||||
'ripple': 'Ripple',
|
||||
'tooltip': 'Tooltip',
|
||||
};
|
||||
|
||||
function capitalize(str) {
|
||||
if (!str) return '';
|
||||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||||
}
|
||||
|
||||
function parseNamedImportItems(importItemsStr) {
|
||||
if (!importItemsStr) return '';
|
||||
return importItemsStr
|
||||
.split(',')
|
||||
.map(item => {
|
||||
item = item.trim();
|
||||
if (item.includes(' as ')) {
|
||||
const [original, alias] = item.split(' as ').map(s => s.trim());
|
||||
return `${original}: ${alias}`;
|
||||
}
|
||||
return item;
|
||||
})
|
||||
.join(', ');
|
||||
}
|
||||
|
||||
return {
|
||||
name: 'custom-transform-imports',
|
||||
enforce: 'post',
|
||||
renderChunk(code) {
|
||||
let transformedCode = code;
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s*{\s*([\s\S]*?)\s*}\s*from\s*["']vue["'];?/g,
|
||||
(match, importItems) => {
|
||||
const processedItems = parseNamedImportItems(importItems);
|
||||
return `const { ${processedItems} } = window.Vue;`;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s+([A-Za-z0-9$_]+)\s+from\s*["']vue["'];?/g,
|
||||
(match, defaultImportName) => {
|
||||
if (match.includes('{') && match.indexOf('{') < match.indexOf('from')) return match;
|
||||
return `const ${defaultImportName} = window.Vue;`;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s+([A-Za-z0-9$_]+)\s*,\s*{\s*([\s\S]*?)\s*}\s*from\s*["']primevue\/config["'];?/g,
|
||||
(match, defaultConfigImport, namedConfigImports) => {
|
||||
const itemsStr = parseNamedImportItems(namedConfigImports);
|
||||
const itemsArray = itemsStr.split(',').map(s => s.trim());
|
||||
|
||||
const fromConfig = [];
|
||||
const fromRoot = [];
|
||||
|
||||
itemsArray.forEach(item => {
|
||||
const originalName = item.includes(':') ? item.split(':')[0].trim() : item;
|
||||
if (originalName === 'usePrimeVue') {
|
||||
fromRoot.push(item);
|
||||
} else {
|
||||
fromConfig.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
let result = '';
|
||||
if (fromRoot.length > 0) {
|
||||
result += `const { ${fromRoot.join(', ')} } = window.PrimeVue;\n`;
|
||||
}
|
||||
if (fromConfig.length > 0) {
|
||||
result += `const { ${fromConfig.join(', ')} } = window.PrimeVue.Config;\n`;
|
||||
}
|
||||
result += `const ${defaultConfigImport} = window.PrimeVue.Config;`;
|
||||
return result;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s*{\s*([\s\S]*?)\s*}\s*from\s*["']primevue\/config["'];?/g,
|
||||
(match, importItems) => {
|
||||
if (match.trim().startsWith('import PrimeVue,')) return match;
|
||||
|
||||
const itemsStr = parseNamedImportItems(importItems);
|
||||
const itemsArray = itemsStr.split(',').map(s => s.trim());
|
||||
|
||||
const fromConfig = [];
|
||||
const fromRoot = [];
|
||||
|
||||
itemsArray.forEach(item => {
|
||||
const originalName = item.includes(':') ? item.split(':')[0].trim() : item;
|
||||
if (originalName === 'usePrimeVue') {
|
||||
fromRoot.push(item);
|
||||
} else {
|
||||
fromConfig.push(item);
|
||||
}
|
||||
});
|
||||
|
||||
let result = '';
|
||||
if (fromRoot.length > 0) {
|
||||
result += `const { ${fromRoot.join(', ')} } = window.PrimeVue;\n`;
|
||||
}
|
||||
if (fromConfig.length > 0) {
|
||||
result += `const { ${fromConfig.join(', ')} } = window.PrimeVue.Config;\n`;
|
||||
}
|
||||
return result.trim();
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s+([A-Za-z0-9$_]+)\s+from\s*["']primevue\/config["'];?/g,
|
||||
(match, defaultImportName) => {
|
||||
if (match.includes('{') && match.indexOf('{') < match.indexOf('from')) return match;
|
||||
return `const ${defaultImportName} = window.PrimeVue.Config;`;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s+(?:{\s*([\s\S]*?)\s*}|([A-Za-z0-9$_]+))\s+from\s*["']primevue\/([^"']+)["'];?/g,
|
||||
(match, namedImportItems, defaultImportName, path) => {
|
||||
const pathKey = path.toLowerCase();
|
||||
|
||||
if (pathKey === 'config') return match;
|
||||
|
||||
if (namedImportItems) {
|
||||
const processedItems = parseNamedImportItems(namedImportItems);
|
||||
|
||||
if (pathKey.startsWith('use')) {
|
||||
return `const { ${processedItems} } = window.PrimeVue;`;
|
||||
}
|
||||
else {
|
||||
const globalNameSuffix = primeVueMap[pathKey] || capitalize(pathKey);
|
||||
return `const { ${processedItems} } = window.PrimeVue.${globalNameSuffix};`;
|
||||
}
|
||||
}
|
||||
else if (defaultImportName) {
|
||||
const globalNameSuffix = primeVueMap[pathKey] || capitalize(pathKey);
|
||||
|
||||
return `const ${defaultImportName} = window.PrimeVue.${globalNameSuffix};`;
|
||||
}
|
||||
return match;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s+([A-Za-z0-9$_]+)\s*,\s*{\s*([\s\S]*?)\s*}\s*from\s*["']primevue["'];?/g,
|
||||
(match, defaultImport, namedImports) => {
|
||||
const processedNamed = parseNamedImportItems(namedImports);
|
||||
|
||||
return `const { ${processedNamed} } = window.PrimeVue;\nconst ${defaultImport} = window.PrimeVue;`;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s*{\s*([\s\S]*?)\s*}\s*from\s*["']primevue["'](?!.*\/);?/g,
|
||||
(match, importItems) => {
|
||||
const processedItems = parseNamedImportItems(importItems);
|
||||
return `const { ${processedItems} } = window.PrimeVue;`;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s+([A-Za-z0-9$_]+)\s+from\s*["']primevue["'](?!.*\/);?/g,
|
||||
(match, defaultImportName) => {
|
||||
if (match.includes('{') && match.indexOf('{') < match.indexOf('from')) return match;
|
||||
|
||||
return `const ${defaultImportName} = window.PrimeVue;`;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s*{\s*([\s\S]*?)\s*}\s*from\s*["']vue-i18n["'];?/g,
|
||||
(match, importItems) => {
|
||||
const processedItems = parseNamedImportItems(importItems);
|
||||
return `const { ${processedItems} } = window.VueI18n;`;
|
||||
}
|
||||
);
|
||||
|
||||
transformedCode = transformedCode.replace(
|
||||
/import\s+([A-Za-z0-9$_]+)\s+from\s*["']vue-i18n["'];?/g,
|
||||
(match, defaultImportName) => {
|
||||
if (match.includes('{') && match.indexOf('{') < match.indexOf('from')) return match;
|
||||
return `const ${defaultImportName} = window.VueI18n;`;
|
||||
}
|
||||
);
|
||||
|
||||
return transformedCode;
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user