fix(plugin-tools): load plugins correctly when specified as strings
This commit is contained in:
parent
20ed2e8a50
commit
d916043061
2 changed files with 27 additions and 21 deletions
5
.changeset/tricky-spies-attack.md
Normal file
5
.changeset/tricky-spies-attack.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'@emigrate/plugin-tools': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fix a regression issue where plugins wasn't correctly loaded if specified as strings
|
||||||
|
|
@ -71,20 +71,28 @@ export const isPluginOfType = <T extends PluginType>(type: T, plugin: any): plug
|
||||||
export const getOrLoadStorage = async (
|
export const getOrLoadStorage = async (
|
||||||
potentialStorages: Array<StringOrModule<unknown>>,
|
potentialStorages: Array<StringOrModule<unknown>>,
|
||||||
): Promise<EmigrateStorage | undefined> => {
|
): Promise<EmigrateStorage | undefined> => {
|
||||||
return getOrLoad(potentialStorages, isEmigrateStorage);
|
return getOrLoad(
|
||||||
|
potentialStorages,
|
||||||
|
['@emigrate/storage-', 'emigrate-storage-', '@emigrate/plugin-storage-', '@emigrate/'],
|
||||||
|
isEmigrateStorage,
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getOrLoadReporter = async (
|
export const getOrLoadReporter = async (
|
||||||
potentialReporters: Array<StringOrModule<unknown>>,
|
potentialReporters: Array<StringOrModule<unknown>>,
|
||||||
): Promise<EmigrateReporter | undefined> => {
|
): Promise<EmigrateReporter | undefined> => {
|
||||||
return getOrLoad(potentialReporters, isEmigrateReporter);
|
return getOrLoad(potentialReporters, ['@emigrate/reporter-', 'emigrate-reporter-', '@emigrate/'], isEmigrateReporter);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getOrLoadPlugin = async <T extends PluginType>(
|
export const getOrLoadPlugin = async <T extends PluginType>(
|
||||||
type: T,
|
type: T,
|
||||||
plugins: Array<StringOrModule<unknown>>,
|
plugins: Array<StringOrModule<unknown>>,
|
||||||
): Promise<PluginFromType<T> | undefined> => {
|
): Promise<PluginFromType<T> | undefined> => {
|
||||||
return getOrLoad(plugins, (value: unknown): value is PluginFromType<T> => isPluginOfType(type, value));
|
return getOrLoad(
|
||||||
|
plugins,
|
||||||
|
['@emigrate/plugin-', 'emigrate-plugin-', '@emigrate/'],
|
||||||
|
(value: unknown): value is PluginFromType<T> => isPluginOfType(type, value),
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getOrLoadPlugins = async <T extends PluginType>(
|
export const getOrLoadPlugins = async <T extends PluginType>(
|
||||||
|
|
@ -120,10 +128,18 @@ export const getOrLoadPlugins = async <T extends PluginType>(
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getOrLoad = async <T>(potentials: Array<StringOrModule<unknown>>, check: (value: unknown) => value is T) => {
|
const getOrLoad = async <T>(
|
||||||
|
potentials: Array<StringOrModule<unknown>>,
|
||||||
|
prefixes: string[],
|
||||||
|
check: (value: unknown) => value is T,
|
||||||
|
) => {
|
||||||
const reversed = [...potentials].reverse();
|
const reversed = [...potentials].reverse();
|
||||||
|
|
||||||
for await (let potential of reversed) {
|
for await (let potential of reversed) {
|
||||||
|
if (typeof potential === 'string') {
|
||||||
|
return load(potential, prefixes, check);
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof potential === 'function') {
|
if (typeof potential === 'function') {
|
||||||
potential = await potential();
|
potential = await potential();
|
||||||
}
|
}
|
||||||
|
|
@ -152,25 +168,10 @@ const getImportFromEsm = async () => {
|
||||||
return importFromEsm;
|
return importFromEsm;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const loadStorage = async (name: string): Promise<EmigrateStorage | undefined> => {
|
const loadPlugin = async <T extends PluginType>(type: T, plugin: string): Promise<PluginFromType<T> | undefined> => {
|
||||||
return load(
|
|
||||||
name,
|
|
||||||
['@emigrate/', '@emigrate/storage-', 'emigrate-storage-', '@emigrate/plugin-storage-'],
|
|
||||||
isEmigrateStorage,
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const loadReporter = async (name: string): Promise<EmigrateReporter | undefined> => {
|
|
||||||
return load(name, ['@emigrate/reporter-', 'emigrate-reporter-'], isEmigrateReporter);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const loadPlugin = async <T extends PluginType>(
|
|
||||||
type: T,
|
|
||||||
plugin: string,
|
|
||||||
): Promise<PluginFromType<T> | undefined> => {
|
|
||||||
return load(
|
return load(
|
||||||
plugin,
|
plugin,
|
||||||
['@emigrate/', '@emigrate/plugin-', 'emigrate-plugin-'],
|
['@emigrate/plugin-', 'emigrate-plugin-', '@emigrate/'],
|
||||||
(value: unknown): value is PluginFromType<T> => {
|
(value: unknown): value is PluginFromType<T> => {
|
||||||
return isPluginOfType(type, value);
|
return isPluginOfType(type, value);
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue