From f0fd63cda17ed3d194a6b090ea3dcceef666df26 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 27 Oct 2026 22:06:57 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=87=AA=E5=AE=9A=E4=B9=89=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=20src=20=E4=B8=8B=E7=9A=84=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages-user/data-state/src/loader/loader.ts | 22 +++++++++++-- packages-user/data-state/src/loader/types.ts | 33 ++++++++++++++++--- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/packages-user/data-state/src/loader/loader.ts b/packages-user/data-state/src/loader/loader.ts index 5c8288b..797edf1 100644 --- a/packages-user/data-state/src/loader/loader.ts +++ b/packages-user/data-state/src/loader/loader.ts @@ -5,7 +5,11 @@ import { LoadDataType, LoadTask } from '@motajs/loader'; -import { IMotaDataLoader, IMotaDataLoaderHooks } from './types'; +import { + ICustomContentInit, + IMotaDataLoader, + IMotaDataLoaderHooks +} from './types'; import { PrefixedJSONCProcessor } from './jsoncProcessor'; import { ICoreStateCoreConfig } from '../common'; import { @@ -62,7 +66,21 @@ export class MotaDataLoader this.extraConfigs.set(identifier, url); } - addCustomTask(task: LoadTask): Promise { + addCustomContent( + init: ICustomContentInit + ): Promise { + const task = new LoadTask({ + identifier: init.identifier, + url: this.resolveURL(init.url), + dataType: init.dataType + }); + task.setProcessor(init.processor); + task.setStarter(this.starter); + this.customTask.add(task); + return task.loaded(); + } + + addCustomTask(task: ILoadTask): Promise { this.customTask.add(task); return task.loaded(); } diff --git a/packages-user/data-state/src/loader/types.ts b/packages-user/data-state/src/loader/types.ts index 3ba253c..cca4bde 100644 --- a/packages-user/data-state/src/loader/types.ts +++ b/packages-user/data-state/src/loader/types.ts @@ -1,5 +1,21 @@ import { IHookable, IHookBase } from '@motajs/common'; -import { ILoadManager, LoadDataType, LoadTask } from '@motajs/loader'; +import { + ILoadManager, + ILoadTask, + ILoadTaskProcessor, + LoadDataType +} from '@motajs/loader'; + +export interface ICustomContentInit { + /** 加载任务的标识符,不能与已有加载任务重复 */ + readonly identifier: string; + /** 自定义内容的文件路径,相对于 `src`。文件必须放到 `src` 文件夹下 */ + readonly url: string; + /** 自定义内容的响应格式 */ + readonly dataType: L; + /** 自定义内容的加载处理器 */ + readonly processor: ILoadTaskProcessor; +} export interface IMotaDataLoaderHooks extends IHookBase { /** @@ -34,7 +50,7 @@ export interface IMotaDataLoader extends IHookable { * 添加核心配置文件,仅允许在加载前调用,之后调用无效。 * 文件必须放在 `src` 下,并填写相对于 `src` 文件夹的路径,文件包含如下要求: * - * - 文件必须为 `jsonc` 格式 + * - 文件必须为 `jsonc` 或 `json` 格式 * - 文件的注释必须全部集中在开头 * - 文件中的最后一行注释必须是 `// --- SYSTEM PREFIX END --- //` * @@ -47,7 +63,7 @@ export interface IMotaDataLoader extends IHookable { * 添加额外配置文件,仅允许在 `onCoreConfigLoaded` 中调用或在加载前调用,加载中及加载后后调用无效。 * 文件必须放在 `src` 下,并填写相对于 `src` 文件夹的路径,文件包含如下要求: * - * - 文件必须为 `jsonc` 格式 + * - 文件必须为 `jsonc` 或 `json` 格式 * - 文件的注释必须全部集中在开头 * - 文件中的最后一行注释必须是 `// --- SYSTEM PREFIX END --- //` * @@ -56,13 +72,22 @@ export interface IMotaDataLoader extends IHookable { */ addExtraConfig(identifier: string, url: string): void; + /** + * 添加自定义加载内容,仅允许在 `onCoreConfigLoaded` 和 `onExtraConfigLoaded` 中调用或在加载前调用, + * 加载中及加载后后调用无效。文件必须放在 `src` 下,并填写相对于 `src` 文件夹的路径。对文件格式不做任何要求。 + * @param init 自定义加载内容的配置对象 + */ + addCustomContent( + init: ICustomContentInit + ): Promise; + /** * 添加自定义加载任务,仅允许在 `onCoreConfigLoaded` 和 `onExtraConfigLoaded` 中调用或在加载前调用, * 加载中及加载后后调用无效。所有的自定义加载任务都会在配置文件加载完毕后开始加载。 * @param task 自定义加载任务实例 * @returns 任务加载完毕后兑现,兑现值为经过加载处理器处理后的值 */ - addCustomTask(task: LoadTask): Promise; + addCustomTask(task: ILoadTask): Promise; /** * 获取指定配置文件,例如核心配置文件是 `core`,怪物配置文件是 `enemy` 等等