Skip to content

Commit

Permalink
chore: optimize convert vite plugin code
Browse files Browse the repository at this point in the history
  • Loading branch information
ErKeLost committed Apr 9, 2024
1 parent aca55a6 commit 7191b32
Showing 1 changed file with 56 additions and 160 deletions.
216 changes: 56 additions & 160 deletions packages/core/src/plugin/js/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,199 +147,95 @@ export function processVitePlugin(
};

if (Array.isArray(vitePlugin)) {
vitePlugin.forEach(processPlugin);
vitePlugin.forEach((plugin) => processPlugin(plugin));
} else {
processPlugin(vitePlugin);
}
}

function normalizeFilterPath(path: string): string {
if (process.platform === 'win32') {
return compatibleWin32Path(path);
}

return path;
return process.platform === 'win32' ? compatibleWin32Path(path) : path;
}

function compatibleWin32Path(path: string): string {
return path.replaceAll('/', '\\\\');
}

// export function convertPlugin(plugin: JsPlugin): void {
// if (
// plugin.transform &&
// !plugin.transform.filters?.moduleTypes &&
// !plugin.transform.filters?.resolvedPaths
// ) {
// throw new Error(
// `transform hook of plugin ${plugin.name} must have at least one filter(like moduleTypes or resolvedPaths)`
// );
// }
// if (plugin.transform) {
// if (!plugin.transform.filters.moduleTypes) {
// plugin.transform.filters.moduleTypes = [];
// } else if (!plugin.transform.filters.resolvedPaths) {
// plugin.transform.filters.resolvedPaths = [];
// }
// }

// if (plugin.renderResourcePot) {
// plugin.renderResourcePot.filters ??= {};

// if (
// !plugin.renderResourcePot?.filters?.moduleIds &&
// !plugin.renderResourcePot?.filters?.resourcePotTypes
// ) {
// throw new Error(
// `renderResourcePot hook of plugin ${plugin.name} must have at least one filter(like moduleIds or resourcePotTypes)`
// );
// }

// if (!plugin.renderResourcePot.filters?.resourcePotTypes) {
// plugin.renderResourcePot.filters.resourcePotTypes = [];
// } else if (!plugin.renderResourcePot.filters?.moduleIds) {
// plugin.renderResourcePot.filters.moduleIds = [];
// }
// }

// if (plugin.augmentResourceHash) {
// plugin.augmentResourceHash.filters ??= {};

// if (
// !plugin.augmentResourceHash?.filters?.moduleIds &&
// !plugin.augmentResourceHash?.filters?.resourcePotTypes
// ) {
// throw new Error(
// `augmentResourceHash hook of plugin ${plugin.name} must have at least one filter(like moduleIds or resourcePotTypes)`
// );
// }

// if (!plugin.augmentResourceHash.filters?.resourcePotTypes) {
// plugin.augmentResourceHash.filters.resourcePotTypes = [];
// } else if (!plugin.augmentResourceHash.filters?.moduleIds) {
// plugin.augmentResourceHash.filters.moduleIds = [];
// }
// }

// if (plugin.resolve?.filters?.importers?.length) {
// if (process.platform === 'win32') {
// // replace / to \
// plugin.resolve.filters.importers =
// plugin.resolve.filters.importers.map(compatibleWin32Path);
// }
// }

// if (plugin.load?.filters?.resolvedPaths?.length) {
// if (process.platform === 'win32') {
// // replace / to \
// plugin.load.filters.resolvedPaths =
// plugin.load.filters.resolvedPaths.map(compatibleWin32Path);
// }
// }

// if (plugin.transform?.filters?.resolvedPaths?.length) {
// if (process.platform === 'win32') {
// // replace / to \
// plugin.transform.filters.resolvedPaths =
// plugin.transform.filters.resolvedPaths.map(compatibleWin32Path);
// }
// }
// if (
// plugin.augmentResourceHash?.filters?.moduleIds &&
// process.platform === 'win32'
// ) {
// plugin.augmentResourceHash.filters.moduleIds =
// plugin.augmentResourceHash.filters.moduleIds.map(compatibleWin32Path);
// }

// if (
// plugin.renderResourcePot?.filters?.moduleIds &&
// process.platform === 'win32'
// ) {
// plugin.renderResourcePot.filters.moduleIds =
// plugin.renderResourcePot.filters.moduleIds.map(compatibleWin32Path);
// }
// }

function ensureFilters(pluginPart: any, requiredFields: string[]): void {
pluginPart.filters ??= {};

const hasAtLeastOneFilter = requiredFields.some((field) =>
Boolean(pluginPart.filters![field])
);
if (!hasAtLeastOneFilter) {
throw new Error(
`Farm Javascript Plugin part must have at least one filter: ${requiredFields.join(
' or '
)}`
);
}
export function convertPlugin(plugin: JsPlugin): void {
const ensureFilterExists = (filters: any, filterName: string): void => {
filters[filterName] ??= [];
};

requiredFields.forEach((field) => {
pluginPart.filters![field] ??= [];
});
}
const ensureHookFiltersExist = (hook: any, hookName: string): void => {
if (!hook) return;

function ensurePathCompatibility(pluginPart: any, fields: string[]): void {
if (process.platform === 'win32' && pluginPart.filters) {
fields.forEach((field) => {
if (pluginPart.filters[field]?.length) {
pluginPart.filters[field] =
pluginPart.filters[field].map(compatibleWin32Path);
}
});
}
}
hook.filters ||= {};

if (!hook.filters.moduleIds || !hook.filters.resourcePotTypes) {
throw new Error(
`${hookName} hook of plugin ${plugin.name} must have at least one filter(like moduleIds or resourcePotTypes)`
);
}

ensureFilterExists(hook.filters, 'moduleIds');
ensureFilterExists(hook.filters, 'resourcePotTypes');
};

export function convertPlugin(plugin: JsPlugin): void {
if (plugin.transform) {
ensureFilters(plugin.transform, ['moduleTypes', 'resolvedPaths']);
}
if (
!plugin.transform.filters?.moduleTypes &&
!plugin.transform.filters?.resolvedPaths
) {
throw new Error(
`transform hook of plugin ${plugin.name} must have at least one filter(like moduleTypes or resolvedPaths)`
);
}

if (plugin.renderResourcePot) {
ensureFilters(plugin.renderResourcePot, ['moduleIds', 'resourcePotTypes']);
ensureFilterExists(plugin.transform.filters, 'moduleTypes');
ensureFilterExists(plugin.transform.filters, 'resolvedPaths');
}

if (plugin.augmentResourceHash) {
ensureFilters(plugin.augmentResourceHash, [
'moduleIds',
'resourcePotTypes'
]);
}
const normalizeFilters = (filters: string[]): string[] => {
return filters.map(normalizeFilterPath);
};

const pathCompatibleParts = [
{ part: plugin.resolve, fields: ['importers'] },
{ part: plugin.load, fields: ['resolvedPaths'] },
{ part: plugin.transform, fields: ['resolvedPaths'] },
{ part: plugin.augmentResourceHash, fields: ['moduleIds'] },
{ part: plugin.renderResourcePot, fields: ['moduleIds'] }
];
const hookNames = {
renderResourcePot: 'renderResourcePot',
augmentResourceHash: 'augmentResourceHash'
};

pathCompatibleParts.forEach(({ part, fields }) => {
ensurePathCompatibility(part, fields);
Object.keys(hookNames).forEach((hookKey) => {
const hook = plugin[hookKey as keyof JsPlugin];
ensureHookFiltersExist(hook, hookNames[hookKey as keyof typeof hookNames]);
});

if (plugin.resolve?.filters?.importers?.length) {
plugin.resolve.filters.importers =
plugin.resolve.filters.importers.map(normalizeFilterPath);
plugin.resolve.filters.importers = normalizeFilters(
plugin.resolve.filters.importers
);
}

if (plugin.load?.filters?.resolvedPaths?.length) {
plugin.load.filters.resolvedPaths =
plugin.load.filters.resolvedPaths.map(normalizeFilterPath);
plugin.load.filters.resolvedPaths = normalizeFilters(
plugin.load.filters.resolvedPaths
);
}

if (plugin.transform?.filters?.resolvedPaths?.length) {
plugin.transform.filters.resolvedPaths =
plugin.transform.filters.resolvedPaths.map(normalizeFilterPath);
plugin.transform.filters.resolvedPaths = normalizeFilters(
plugin.transform.filters.resolvedPaths
);
}

if (plugin.augmentResourceHash?.filters?.moduleIds) {
plugin.augmentResourceHash.filters.moduleIds =
plugin.augmentResourceHash.filters.moduleIds.map(normalizeFilterPath);
plugin.augmentResourceHash.filters.moduleIds = normalizeFilters(
plugin.augmentResourceHash.filters.moduleIds
);
}

if (plugin.renderResourcePot?.filters?.moduleIds) {
plugin.renderResourcePot.filters.moduleIds =
plugin.renderResourcePot.filters.moduleIds.map(normalizeFilterPath);
plugin.renderResourcePot.filters.moduleIds = normalizeFilters(
plugin.renderResourcePot.filters.moduleIds
);
}
}

0 comments on commit 7191b32

Please sign in to comment.