Skip to content

Commit

Permalink
fix(loader): consistent loader interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Heymdall committed Oct 10, 2023
1 parent 473ab9f commit 1fdd5d4
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ConsumersCounter } from './utils/consumers-counter';
import { removeModuleResources } from './utils/dom-utils';
import { getCompatModule, getModule } from './utils/get-module';
import { mountModuleResources } from './utils/mount-module-resources';
import { BaseModuleState, GetResourcesRequest, Loader, LoaderParams, ModuleResources } from './types';
import { BaseModuleState, GetResourcesRequest, Loader, ModuleResources } from './types';

export type ModuleResourcesGetter<GetResourcesParams, ModuleState extends BaseModuleState> = (
params: GetResourcesRequest<GetResourcesParams>,
Expand Down Expand Up @@ -68,12 +68,12 @@ export function createModuleLoader<

const moduleConsumersCounter = new ConsumersCounter(moduleId);

return async (params, cssTargetSelector) => {
return async ({ cssTargetSelector, getResourcesParams}) => {
// Загружаем описание модуля
const moduleResources = await getModuleResources({
moduleId,
hostAppId,
params: (params as LoaderParams<unknown>).getResourcesParams as any, // для того чтобы пользователям не пришлось передавать этот параметр если он им не нужен, мы обвешиваемся type-cast'ом
params: getResourcesParams as any, // для того чтобы пользователям не пришлось передавать этот параметр если он им не нужен, мы обвешиваемся type-cast'ом
});

await onBeforeResourcesMount?.(moduleId, moduleResources);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ export function useModuleMounter<LoaderParams, RunParams, ServerState extends Ba
}
setLoadingState('pending');
try {
const result = await loader(
{ getResourcesParams: loaderParams as LoaderParams },
const result = await loader({
getResourcesParams: loaderParams as LoaderParams,
cssTargetSelector,
);
});

const module = unwrapDefaultExport(result.module);

Expand Down
10 changes: 7 additions & 3 deletions packages/arui-scripts-modules/src/module-loader/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -75,19 +75,23 @@ export type LoaderResult<ModuleExportType> = {
// Для того чтобы пользователям не приходилось передавать undefined если их загрузчик не принимает параметры
// мы делаем такой мини-хак
export type LoaderParams<GetResourcesParams> = {
/**
* Параметры, которые будут переданы в функцию получения ресурсов модуля
*/
getResourcesParams: GetResourcesParams;
/**
* Опциональный параметр, который используется для поиска элемента, в который нужно вставить css ресурсы модуля.
*/
cssTargetSelector?: string;
};

/**
* Функция, которая загружает модуль и подключает его на страницу.
* Может принимать дополнительные параметры, которые будут переданы в функцию получения ресурсов модуля.
* Возвращает промис, содержащий сам модуль и функцию, которая удаляет ресурсы модуля со страницы.
* @param params параметры, которые будут переданы в функцию получения ресурсов модуля
* @param cssTargetSelector Опциональный параметр, который используется для поиска элемента, в который нужно вставить css ресурсы модуля.
*/
export type Loader<GetResourcesParams, ModuleExportType = unknown> = (
params: LoaderParams<GetResourcesParams>,
cssTargetSelector?: string,
) => Promise<LoaderResult<ModuleExportType>>;

// Описание типов модулей
Expand Down

0 comments on commit 1fdd5d4

Please sign in to comment.