/
weylin
/
WtDev
Обзор
Документация
Войти
/
weylin
/
WtDev
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
src/tasks.ts
103 строки
2 KB
Weylin
Добавлен механизм пайплайнов
22 окт 2025, 02:46
22 окт 2025, 02:46
5a36c85
Код
Авторство
О чём код?
import { SimpleApiResult, ResourceUpload, WtServer, PreparedResource, XmlElem, } from "./common"; import { getBackendFolder, getRootFolder, sendApiRequest, storeXmlElem, } from "./upload"; import { promises as fsa } from "fs"; import path from "path"; type WtTaskAction = "UploadFilesToResources"; type WtConfigTask = { name: string; title: string; action: WtTaskAction; }; type WtConfigTask_UploadFilesToResources = WtConfigTask & { uploads?: ResourceUpload[]; }; type AnyWtConfigTask = WtConfigTask_UploadFilesToResources; type ResourceFileUploadResult = { ok: boolean; message?: string; updatedXmlElems: XmlElem[]; }; abstract class WtTask { protected _wtConfigTask: AnyWtConfigTask; static factory(wtConfigTask: AnyWtConfigTask) { if (wtConfigTask.action === "UploadFilesToResources") { return new WtTask_UploadFilesToResources(wtConfigTask); } return undefined; } constructor(wtConfigTask: AnyWtConfigTask) { this._wtConfigTask = wtConfigTask; } abstract run(): Promise<boolean>; } class WtTask_UploadFilesToResources extends WtTask { constructor(wtConfigTask: WtConfigTask_UploadFilesToResources) { super(wtConfigTask); } async run(server?: WtServer) { if (!this._wtConfigTask.uploads) { return false; } const preparedResources: PreparedResource[] = []; for (const upload of this._wtConfigTask.uploads) { preparedResources.push(await this.prepareResource(upload)); } const postData = { action: this._wtConfigTask.action, uploads: preparedResources, }; const uploadResult = await sendApiRequest<ResourceFileUploadResult>( postData, server ); for (const updatedXmlElem of uploadResult.updatedXmlElems) { storeXmlElem(updatedXmlElem); } return uploadResult.ok; } private async prepareResource(resourceUpload: ResourceUpload) { const rootFolder = getRootFolder(); const filePath = path.resolve(rootFolder, resourceUpload.filePath); const fileData = await fsa.readFile(filePath); const preparedResource: PreparedResource = { name: path.basename(filePath), code: resourceUpload.resourceCode, data: fileData.toString("base64"), }; return preparedResource; } } export { WtConfigTask, WtTask };