@mdfriday/foundry 26.2.8 → 26.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/worker/pool-manager.js +438 -96723
- package/dist/worker/worker-node.js +249 -145
- package/package.json +1 -1
- package/dist/worker/worker-inline.js +0 -1
|
@@ -95220,7 +95220,6 @@ var init_pool_manager = __esm({
|
|
|
95220
95220
|
"use strict";
|
|
95221
95221
|
init_log();
|
|
95222
95222
|
workerpool = __toESM2(require("workerpool"));
|
|
95223
|
-
init_worker_main();
|
|
95224
95223
|
os = __toESM2(require("os"));
|
|
95225
95224
|
log57 = getDomainLogger("application", { component: "pool-manager" });
|
|
95226
95225
|
WorkerPoolManager = class {
|
|
@@ -95242,21 +95241,28 @@ var init_pool_manager = __esm({
|
|
|
95242
95241
|
* 这样可以正确识别 Electron/Obsidian 环境(有 Node.js API 但只支持 Web Workers)
|
|
95243
95242
|
*/
|
|
95244
95243
|
detectEnvironment() {
|
|
95245
|
-
if (typeof Worker !== "undefined" && typeof globalThis.window !== "undefined") {
|
|
95246
|
-
log57.debug("Detected Web Worker support (browser/Electron environment)");
|
|
95247
|
-
return "browser";
|
|
95248
|
-
}
|
|
95249
95244
|
if (typeof process !== "undefined" && process.versions && process.versions.node) {
|
|
95250
95245
|
try {
|
|
95251
95246
|
require.resolve("worker_threads");
|
|
95252
95247
|
log57.debug("Detected Node.js Worker Threads support");
|
|
95248
|
+
if (process.versions.electron) {
|
|
95249
|
+
log57.info("\u2728 Detected Electron environment - using Node.js Worker Threads (full Node.js API support)");
|
|
95250
|
+
}
|
|
95253
95251
|
return "node";
|
|
95254
95252
|
} catch {
|
|
95255
|
-
log57.debug("Node.js detected but worker_threads unavailable
|
|
95256
|
-
|
|
95253
|
+
log57.debug("Node.js detected but worker_threads unavailable");
|
|
95254
|
+
if (typeof Worker !== "undefined" && typeof globalThis.window !== "undefined") {
|
|
95255
|
+
log57.warn("\u26A0\uFE0F Falling back to Web Workers (limited: no Node.js API access)");
|
|
95256
|
+
return "browser";
|
|
95257
|
+
}
|
|
95258
|
+
throw new Error("No worker support available (neither Worker Threads nor Web Workers)");
|
|
95257
95259
|
}
|
|
95258
95260
|
}
|
|
95259
|
-
|
|
95261
|
+
if (typeof Worker !== "undefined" && typeof globalThis.window !== "undefined") {
|
|
95262
|
+
log57.debug("Detected Web Worker support (pure browser environment)");
|
|
95263
|
+
return "browser";
|
|
95264
|
+
}
|
|
95265
|
+
log57.warn("Unable to detect environment reliably, defaulting to browser mode");
|
|
95260
95266
|
return "browser";
|
|
95261
95267
|
}
|
|
95262
95268
|
/**
|
|
@@ -95332,19 +95338,19 @@ var init_pool_manager = __esm({
|
|
|
95332
95338
|
/**
|
|
95333
95339
|
* 初始化浏览器 Worker 池
|
|
95334
95340
|
*
|
|
95335
|
-
*
|
|
95336
|
-
*
|
|
95341
|
+
* ⚠️ 当前不支持纯浏览器环境的并行处理
|
|
95342
|
+
* 原因:SSG 依赖 Node.js 文件系统 API(fs、path 等),Web Workers 无法访问
|
|
95343
|
+
*
|
|
95344
|
+
* 注:Electron/Obsidian 应该使用 Node.js Worker Threads(在 detectEnvironment 中处理)
|
|
95337
95345
|
*/
|
|
95338
95346
|
async initializeBrowserPool() {
|
|
95339
|
-
|
|
95340
|
-
|
|
95341
|
-
|
|
95342
|
-
|
|
95343
|
-
|
|
95344
|
-
|
|
95345
|
-
|
|
95346
|
-
log57.debug(`Browser worker pool created with ${this.workerCount} workers`);
|
|
95347
|
-
});
|
|
95347
|
+
log57.error("\u274C Browser/Web Workers mode is not supported for SSG parallel processing");
|
|
95348
|
+
log57.info("\u{1F4A1} Reason: SSG requires Node.js file system access (fs, path, etc.)");
|
|
95349
|
+
log57.info("\u{1F4A1} Electron/Obsidian: Should use Node.js Worker Threads instead");
|
|
95350
|
+
log57.info("\u{1F4A1} Pure browser: Parallel processing not available, use serial mode");
|
|
95351
|
+
throw new Error(
|
|
95352
|
+
"PARALLEL_NOT_SUPPORTED: SSG parallel processing requires Node.js file system access. Web Workers cannot access fs/path modules. System will fall back to serial processing."
|
|
95353
|
+
);
|
|
95348
95354
|
}
|
|
95349
95355
|
/**
|
|
95350
95356
|
* 执行 Worker 任务
|
|
@@ -95353,17 +95359,45 @@ var init_pool_manager = __esm({
|
|
|
95353
95359
|
if (!this.pool) {
|
|
95354
95360
|
throw new Error("Worker pool not initialized. Call initialize() first.");
|
|
95355
95361
|
}
|
|
95362
|
+
log57.debug(`\u{1F4E4} Executing worker task: ${task.type}`, {
|
|
95363
|
+
environment: this.environment,
|
|
95364
|
+
taskType: task.type,
|
|
95365
|
+
hasProjectDir: !!task.projDir,
|
|
95366
|
+
hasModuleDir: !!task.moduleDir,
|
|
95367
|
+
pageTasksCount: task.pageTasks?.length || 0
|
|
95368
|
+
});
|
|
95356
95369
|
try {
|
|
95357
95370
|
if (this.environment === "node") {
|
|
95371
|
+
log57.debug("\u{1F527} Using Node.js worker (processTask function)");
|
|
95358
95372
|
const response = await this.pool.exec("processTask", [task]);
|
|
95373
|
+
log57.debug("\u{1F4E5} Node worker response received", { success: response.success });
|
|
95359
95374
|
return response;
|
|
95360
95375
|
} else {
|
|
95361
|
-
|
|
95376
|
+
log57.debug("\u{1F310} Using browser worker (calling registered processTask)");
|
|
95377
|
+
log57.debug("Task being sent to worker:", JSON.stringify({
|
|
95378
|
+
type: task.type,
|
|
95379
|
+
projDir: task.projDir,
|
|
95380
|
+
moduleDir: task.moduleDir,
|
|
95381
|
+
pageTasksCount: task.pageTasks?.length
|
|
95382
|
+
}));
|
|
95383
|
+
const response = await this.pool.exec("processTask", [task]);
|
|
95384
|
+
log57.debug("\u{1F4E5} Browser worker response received", {
|
|
95385
|
+
success: response.success,
|
|
95386
|
+
hasData: !!response.data,
|
|
95387
|
+
error: response.error
|
|
95388
|
+
});
|
|
95362
95389
|
return response;
|
|
95363
95390
|
}
|
|
95364
95391
|
} catch (error) {
|
|
95365
95392
|
const message = error instanceof Error ? error.message : String(error);
|
|
95366
|
-
|
|
95393
|
+
const stack = error instanceof Error ? error.stack : void 0;
|
|
95394
|
+
log57.error(`\u274C Worker task execution failed: ${message}`);
|
|
95395
|
+
log57.debug("Error details:", {
|
|
95396
|
+
message,
|
|
95397
|
+
stack,
|
|
95398
|
+
environment: this.environment,
|
|
95399
|
+
taskType: task.type
|
|
95400
|
+
});
|
|
95367
95401
|
return {
|
|
95368
95402
|
success: false,
|
|
95369
95403
|
error: message
|
|
@@ -95472,6 +95506,7 @@ function createTaskBatches(tasks2, batchSize) {
|
|
|
95472
95506
|
}
|
|
95473
95507
|
async function runWorkerLoop(poolManager, taskQueue, workerIndex, totalPages, completedPages, onProgress) {
|
|
95474
95508
|
const results = [];
|
|
95509
|
+
log59.debug(`\u{1F680} Worker ${workerIndex} loop started`);
|
|
95475
95510
|
while (true) {
|
|
95476
95511
|
const batch = taskQueue.nextBatch();
|
|
95477
95512
|
if (!batch) {
|
|
@@ -95485,7 +95520,16 @@ async function runWorkerLoop(poolManager, taskQueue, workerIndex, totalPages, co
|
|
|
95485
95520
|
pageTasks: batch
|
|
95486
95521
|
// ⭐ 现在传递 PageTask[] 而不是 string[]
|
|
95487
95522
|
};
|
|
95523
|
+
log59.debug(`Worker ${workerIndex} sending task to pool manager`, {
|
|
95524
|
+
taskType: task.type,
|
|
95525
|
+
batchSize: batch.length
|
|
95526
|
+
});
|
|
95488
95527
|
const response = await poolManager.exec(task);
|
|
95528
|
+
log59.debug(`Worker ${workerIndex} received response`, {
|
|
95529
|
+
success: response.success,
|
|
95530
|
+
hasData: !!response.data,
|
|
95531
|
+
error: response.error
|
|
95532
|
+
});
|
|
95489
95533
|
if (response.success && response.data) {
|
|
95490
95534
|
const result = response.data;
|
|
95491
95535
|
results.push(result);
|
|
@@ -95503,6 +95547,10 @@ async function runWorkerLoop(poolManager, taskQueue, workerIndex, totalPages, co
|
|
|
95503
95547
|
log59.info(`\u2705 Worker ${workerIndex} completed batch: ${result.processedCount} tasks in ${result.duration.toFixed(2)}ms`);
|
|
95504
95548
|
} else {
|
|
95505
95549
|
log59.error(`\u274C Worker ${workerIndex} failed: ${response.error}`);
|
|
95550
|
+
log59.debug(`Worker ${workerIndex} error details:`, {
|
|
95551
|
+
batchSize: batch.length,
|
|
95552
|
+
error: response.error
|
|
95553
|
+
});
|
|
95506
95554
|
results.push({
|
|
95507
95555
|
success: false,
|
|
95508
95556
|
processedCount: 0,
|
|
@@ -95512,6 +95560,7 @@ async function runWorkerLoop(poolManager, taskQueue, workerIndex, totalPages, co
|
|
|
95512
95560
|
});
|
|
95513
95561
|
}
|
|
95514
95562
|
}
|
|
95563
|
+
log59.debug(`Worker ${workerIndex} loop completed, processed ${results.length} batches`);
|
|
95515
95564
|
return results;
|
|
95516
95565
|
}
|
|
95517
95566
|
async function processSSGParallel(projDir, modulesDir, markdown, onProgress, httpClient) {
|
|
@@ -95572,15 +95621,27 @@ async function processSSGParallel(projDir, modulesDir, markdown, onProgress, htt
|
|
|
95572
95621
|
const initStartTime = performance.now();
|
|
95573
95622
|
const initTasks = [];
|
|
95574
95623
|
for (let i = 0; i < workerCount; i++) {
|
|
95624
|
+
log59.debug(`Creating init task for worker ${i}`);
|
|
95575
95625
|
const initTask = {
|
|
95576
95626
|
type: "init",
|
|
95577
95627
|
projDir,
|
|
95578
95628
|
moduleDir: modulesDir
|
|
95579
95629
|
};
|
|
95580
|
-
|
|
95630
|
+
const initPromise = poolManager.exec(initTask);
|
|
95631
|
+
initPromise.then(
|
|
95632
|
+
(result) => log59.debug(`Worker ${i} init result:`, { success: result.success, error: result.error }),
|
|
95633
|
+
(error) => log59.error(`Worker ${i} init failed:`, error)
|
|
95634
|
+
);
|
|
95635
|
+
initTasks.push(initPromise);
|
|
95581
95636
|
}
|
|
95582
|
-
|
|
95637
|
+
log59.info(`Waiting for ${workerCount} workers to initialize...`);
|
|
95638
|
+
const initResults = await Promise.all(initTasks);
|
|
95583
95639
|
const initDuration = performance.now() - initStartTime;
|
|
95640
|
+
const failedInits = initResults.filter((r) => !r.success);
|
|
95641
|
+
if (failedInits.length > 0) {
|
|
95642
|
+
log59.error(`\u274C ${failedInits.length} workers failed to initialize:`, failedInits);
|
|
95643
|
+
throw new Error(`Failed to initialize ${failedInits.length} workers: ${failedInits.map((r) => r.error).join(", ")}`);
|
|
95644
|
+
}
|
|
95584
95645
|
log59.info(`\u2705 All workers initialized in ${initDuration.toFixed(2)}ms`);
|
|
95585
95646
|
onProgress?.({
|
|
95586
95647
|
stage: "build",
|
|
@@ -96194,9 +96255,21 @@ async function serveSSG(projDir, modulesDir, markdown, onProgress, httpClient) {
|
|
|
96194
96255
|
process.chdir(projDir);
|
|
96195
96256
|
const tasks2 = await collectAllPageTasks(projDir, modulesDir, markdown, onProgress, httpClient);
|
|
96196
96257
|
if (tasks2.length > 80) {
|
|
96197
|
-
|
|
96198
|
-
|
|
96258
|
+
log60.info(`\u{1F4CA} Found ${tasks2.length} pages, attempting parallel processing...`);
|
|
96259
|
+
try {
|
|
96260
|
+
await processSSGParallel(projDir, modulesDir, markdown, onProgress, httpClient);
|
|
96261
|
+
return getDomainInstances();
|
|
96262
|
+
} catch (parallelError) {
|
|
96263
|
+
const errorMessage = parallelError instanceof Error ? parallelError.message : String(parallelError);
|
|
96264
|
+
if (errorMessage.includes("PARALLEL_NOT_SUPPORTED")) {
|
|
96265
|
+
log60.warn("\u26A0\uFE0F Parallel processing not available, falling back to serial processing");
|
|
96266
|
+
log60.info(`\u{1F504} Processing ${tasks2.length} pages in serial mode...`);
|
|
96267
|
+
return await generateStaticSiteWithProgress(projDir, modulesDir, markdown, onProgress, httpClient);
|
|
96268
|
+
}
|
|
96269
|
+
throw parallelError;
|
|
96270
|
+
}
|
|
96199
96271
|
}
|
|
96272
|
+
log60.info(`\u{1F4CA} Found ${tasks2.length} pages, using serial processing...`);
|
|
96200
96273
|
return await generateStaticSiteWithProgress(projDir, modulesDir, markdown, onProgress, httpClient);
|
|
96201
96274
|
} catch (error) {
|
|
96202
96275
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -96301,117 +96374,129 @@ var init_ssg = __esm({
|
|
|
96301
96374
|
}
|
|
96302
96375
|
});
|
|
96303
96376
|
|
|
96377
|
+
// internal/application/worker/worker-node.ts
|
|
96378
|
+
var workerpool2 = __toESM2(require("workerpool"));
|
|
96379
|
+
|
|
96304
96380
|
// internal/application/worker/worker-state.ts
|
|
96305
|
-
|
|
96306
|
-
|
|
96307
|
-
|
|
96308
|
-
|
|
96309
|
-
|
|
96310
|
-
|
|
96311
|
-
|
|
96312
|
-
|
|
96313
|
-
|
|
96314
|
-
|
|
96315
|
-
|
|
96316
|
-
|
|
96317
|
-
|
|
96318
|
-
|
|
96319
|
-
|
|
96320
|
-
|
|
96321
|
-
|
|
96322
|
-
|
|
96323
|
-
|
|
96324
|
-
|
|
96325
|
-
|
|
96326
|
-
|
|
96327
|
-
|
|
96328
|
-
|
|
96329
|
-
|
|
96330
|
-
|
|
96331
|
-
|
|
96332
|
-
|
|
96333
|
-
|
|
96334
|
-
|
|
96335
|
-
|
|
96336
|
-
|
|
96337
|
-
|
|
96338
|
-
|
|
96339
|
-
|
|
96340
|
-
|
|
96341
|
-
|
|
96342
|
-
|
|
96343
|
-
|
|
96344
|
-
|
|
96345
|
-
|
|
96346
|
-
|
|
96347
|
-
|
|
96348
|
-
|
|
96349
|
-
|
|
96350
|
-
|
|
96351
|
-
|
|
96352
|
-
|
|
96353
|
-
|
|
96354
|
-
|
|
96355
|
-
|
|
96356
|
-
|
|
96357
|
-
|
|
96358
|
-
|
|
96359
|
-
|
|
96360
|
-
|
|
96361
|
-
|
|
96362
|
-
|
|
96363
|
-
|
|
96364
|
-
|
|
96365
|
-
|
|
96366
|
-
|
|
96367
|
-
|
|
96368
|
-
|
|
96369
|
-
|
|
96370
|
-
|
|
96371
|
-
|
|
96372
|
-
|
|
96373
|
-
|
|
96374
|
-
|
|
96375
|
-
|
|
96376
|
-
|
|
96377
|
-
|
|
96378
|
-
|
|
96379
|
-
|
|
96380
|
-
|
|
96381
|
-
|
|
96382
|
-
|
|
96383
|
-
|
|
96384
|
-
|
|
96385
|
-
|
|
96386
|
-
|
|
96387
|
-
|
|
96388
|
-
|
|
96389
|
-
|
|
96390
|
-
|
|
96391
|
-
|
|
96392
|
-
return {
|
|
96393
|
-
initialized: this.initialized,
|
|
96394
|
-
projDir: this.projDir,
|
|
96395
|
-
moduleDir: this.moduleDir
|
|
96396
|
-
};
|
|
96397
|
-
}
|
|
96381
|
+
init_log();
|
|
96382
|
+
init_page_filter();
|
|
96383
|
+
var log61 = getDomainLogger("application", { component: "worker-state" });
|
|
96384
|
+
var WorkerState = class {
|
|
96385
|
+
constructor(projDir, moduleDir) {
|
|
96386
|
+
this.projDir = projDir;
|
|
96387
|
+
this.moduleDir = moduleDir;
|
|
96388
|
+
}
|
|
96389
|
+
initialized = false;
|
|
96390
|
+
/**
|
|
96391
|
+
* 初始化 Worker 环境(只执行一次)
|
|
96392
|
+
*/
|
|
96393
|
+
async initialize() {
|
|
96394
|
+
if (this.initialized) {
|
|
96395
|
+
log61.warn("Worker already initialized, skipping...");
|
|
96396
|
+
return;
|
|
96397
|
+
}
|
|
96398
|
+
const startTime = performance.now();
|
|
96399
|
+
log61.info("\u{1F680} Initializing worker environment...", {
|
|
96400
|
+
projDir: this.projDir,
|
|
96401
|
+
moduleDir: this.moduleDir
|
|
96402
|
+
});
|
|
96403
|
+
this.initialized = true;
|
|
96404
|
+
const duration = performance.now() - startTime;
|
|
96405
|
+
log61.info(`\u2705 Worker environment initialized in ${duration.toFixed(2)}ms`);
|
|
96406
|
+
}
|
|
96407
|
+
/**
|
|
96408
|
+
* 处理一个批次的页面任务
|
|
96409
|
+
* 运行完整的 SSG 流程,但通过过滤器只处理指定任务
|
|
96410
|
+
*
|
|
96411
|
+
* @param pageTasks - 包含语言和路径信息的任务列表
|
|
96412
|
+
*/
|
|
96413
|
+
async processBatch(pageTasks) {
|
|
96414
|
+
if (!this.initialized) {
|
|
96415
|
+
throw new Error("Worker not initialized. Call initialize() first.");
|
|
96416
|
+
}
|
|
96417
|
+
const startTime = performance.now();
|
|
96418
|
+
const errors2 = [];
|
|
96419
|
+
log61.info(`\u{1F4E6} Processing batch: ${pageTasks.length} tasks`);
|
|
96420
|
+
try {
|
|
96421
|
+
setPageFilter(pageTasks);
|
|
96422
|
+
log61.debug(`Filter set for ${pageTasks.length} tasks`);
|
|
96423
|
+
const { generateStaticSite: generateStaticSite2 } = await Promise.resolve().then(() => (init_ssg(), ssg_exports));
|
|
96424
|
+
await generateStaticSite2(this.projDir, this.moduleDir);
|
|
96425
|
+
log61.debug("\u2705 Tasks processed (filtered)");
|
|
96426
|
+
const duration = performance.now() - startTime;
|
|
96427
|
+
const result = {
|
|
96428
|
+
success: true,
|
|
96429
|
+
processedCount: pageTasks.length,
|
|
96430
|
+
totalCount: pageTasks.length,
|
|
96431
|
+
duration,
|
|
96432
|
+
errors: errors2
|
|
96433
|
+
};
|
|
96434
|
+
log61.info(`\u2705 Batch processed: ${pageTasks.length} tasks in ${duration.toFixed(2)}ms`);
|
|
96435
|
+
return result;
|
|
96436
|
+
} catch (error) {
|
|
96437
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
96438
|
+
const errorMsg = `Batch processing failed: ${message}`;
|
|
96439
|
+
log61.error(`\u274C ${errorMsg}`);
|
|
96440
|
+
errors2.push(errorMsg);
|
|
96441
|
+
const duration = performance.now() - startTime;
|
|
96442
|
+
return {
|
|
96443
|
+
success: false,
|
|
96444
|
+
processedCount: 0,
|
|
96445
|
+
totalCount: pageTasks.length,
|
|
96446
|
+
duration,
|
|
96447
|
+
errors: errors2
|
|
96448
|
+
};
|
|
96449
|
+
} finally {
|
|
96450
|
+
clearPageFilter();
|
|
96451
|
+
}
|
|
96452
|
+
}
|
|
96453
|
+
/**
|
|
96454
|
+
* 清理资源
|
|
96455
|
+
*/
|
|
96456
|
+
async cleanup() {
|
|
96457
|
+
log61.info("\u{1F9F9} Cleaning up worker resources...");
|
|
96458
|
+
this.initialized = false;
|
|
96459
|
+
}
|
|
96460
|
+
/**
|
|
96461
|
+
* 获取统计信息
|
|
96462
|
+
*/
|
|
96463
|
+
getStats() {
|
|
96464
|
+
return {
|
|
96465
|
+
initialized: this.initialized,
|
|
96466
|
+
projDir: this.projDir,
|
|
96467
|
+
moduleDir: this.moduleDir
|
|
96398
96468
|
};
|
|
96399
96469
|
}
|
|
96400
|
-
}
|
|
96470
|
+
};
|
|
96401
96471
|
|
|
96402
96472
|
// internal/application/worker/worker-main.ts
|
|
96473
|
+
init_log();
|
|
96474
|
+
var log62 = getDomainLogger("application", { component: "worker-main" });
|
|
96475
|
+
var workerState = null;
|
|
96403
96476
|
async function handleWorkerTask(task) {
|
|
96477
|
+
log62.info(`\u{1F528} handleWorkerTask called with task type: ${task.type}`);
|
|
96478
|
+
log62.debug("Task details:", {
|
|
96479
|
+
type: task.type,
|
|
96480
|
+
hasProjDir: !!task.projDir,
|
|
96481
|
+
hasModuleDir: !!task.moduleDir,
|
|
96482
|
+
pageTasksCount: task.pageTasks?.length || 0
|
|
96483
|
+
});
|
|
96404
96484
|
try {
|
|
96405
96485
|
switch (task.type) {
|
|
96406
96486
|
case "init":
|
|
96487
|
+
log62.debug("Handling init task");
|
|
96407
96488
|
return await handleInit(task);
|
|
96408
96489
|
case "process-batch":
|
|
96490
|
+
log62.debug("Handling process-batch task");
|
|
96409
96491
|
return await handleProcessBatch(task);
|
|
96410
96492
|
case "stats":
|
|
96493
|
+
log62.debug("Handling stats task");
|
|
96411
96494
|
return await handleStats();
|
|
96412
96495
|
case "cleanup":
|
|
96496
|
+
log62.debug("Handling cleanup task");
|
|
96413
96497
|
return await handleCleanup();
|
|
96414
96498
|
default:
|
|
96499
|
+
log62.error(`Unknown task type: ${task.type}`);
|
|
96415
96500
|
return {
|
|
96416
96501
|
success: false,
|
|
96417
96502
|
error: `Unknown task type: ${task.type}`
|
|
@@ -96419,7 +96504,9 @@ async function handleWorkerTask(task) {
|
|
|
96419
96504
|
}
|
|
96420
96505
|
} catch (error) {
|
|
96421
96506
|
const message = error instanceof Error ? error.message : String(error);
|
|
96422
|
-
|
|
96507
|
+
const stack = error instanceof Error ? error.stack : void 0;
|
|
96508
|
+
log62.error(`\u274C Worker task failed: ${message}`);
|
|
96509
|
+
log62.debug("Error stack:", stack);
|
|
96423
96510
|
return {
|
|
96424
96511
|
success: false,
|
|
96425
96512
|
error: message
|
|
@@ -96427,39 +96514,68 @@ async function handleWorkerTask(task) {
|
|
|
96427
96514
|
}
|
|
96428
96515
|
}
|
|
96429
96516
|
async function handleInit(task) {
|
|
96517
|
+
log62.info("\u{1F527} handleInit called");
|
|
96518
|
+
log62.debug("Init task params:", {
|
|
96519
|
+
projDir: task.projDir,
|
|
96520
|
+
moduleDir: task.moduleDir
|
|
96521
|
+
});
|
|
96430
96522
|
if (!task.projDir || !task.moduleDir) {
|
|
96523
|
+
log62.error("Missing required parameters for init");
|
|
96431
96524
|
return {
|
|
96432
96525
|
success: false,
|
|
96433
96526
|
error: "Missing projDir or moduleDir for init task"
|
|
96434
96527
|
};
|
|
96435
96528
|
}
|
|
96436
|
-
|
|
96437
|
-
|
|
96438
|
-
|
|
96439
|
-
|
|
96440
|
-
|
|
96441
|
-
|
|
96442
|
-
|
|
96529
|
+
try {
|
|
96530
|
+
log62.info("Creating WorkerState...");
|
|
96531
|
+
workerState = new WorkerState(task.projDir, task.moduleDir);
|
|
96532
|
+
log62.info("Initializing WorkerState...");
|
|
96533
|
+
await workerState.initialize();
|
|
96534
|
+
log62.info("\u2705 Worker initialized successfully");
|
|
96535
|
+
return {
|
|
96536
|
+
success: true,
|
|
96537
|
+
data: { message: "Worker initialized successfully" }
|
|
96538
|
+
};
|
|
96539
|
+
} catch (error) {
|
|
96540
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
96541
|
+
log62.error(`Failed to initialize worker: ${message}`);
|
|
96542
|
+
throw error;
|
|
96543
|
+
}
|
|
96443
96544
|
}
|
|
96444
96545
|
async function handleProcessBatch(task) {
|
|
96546
|
+
log62.info("\u{1F4E6} handleProcessBatch called");
|
|
96445
96547
|
if (!workerState) {
|
|
96548
|
+
log62.error("Worker not initialized");
|
|
96446
96549
|
return {
|
|
96447
96550
|
success: false,
|
|
96448
96551
|
error: "Worker not initialized. Call init task first."
|
|
96449
96552
|
};
|
|
96450
96553
|
}
|
|
96451
96554
|
if (!task.pageTasks || task.pageTasks.length === 0) {
|
|
96555
|
+
log62.error("Missing pageTasks");
|
|
96452
96556
|
return {
|
|
96453
96557
|
success: false,
|
|
96454
96558
|
error: "Missing pageTasks for process-batch task"
|
|
96455
96559
|
};
|
|
96456
96560
|
}
|
|
96457
|
-
|
|
96458
|
-
|
|
96459
|
-
|
|
96460
|
-
|
|
96461
|
-
|
|
96462
|
-
|
|
96561
|
+
log62.info(`Processing batch of ${task.pageTasks.length} tasks...`);
|
|
96562
|
+
try {
|
|
96563
|
+
const result = await workerState.processBatch(task.pageTasks);
|
|
96564
|
+
log62.info(`\u2705 Batch processed: ${result.processedCount}/${result.totalCount} pages`, {
|
|
96565
|
+
success: result.success,
|
|
96566
|
+
duration: result.duration,
|
|
96567
|
+
errorCount: result.errors.length
|
|
96568
|
+
});
|
|
96569
|
+
return {
|
|
96570
|
+
success: result.success,
|
|
96571
|
+
data: result,
|
|
96572
|
+
error: result.errors.length > 0 ? result.errors.join("; ") : void 0
|
|
96573
|
+
};
|
|
96574
|
+
} catch (error) {
|
|
96575
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
96576
|
+
log62.error(`Failed to process batch: ${message}`);
|
|
96577
|
+
throw error;
|
|
96578
|
+
}
|
|
96463
96579
|
}
|
|
96464
96580
|
async function handleStats() {
|
|
96465
96581
|
if (!workerState) {
|
|
@@ -96487,20 +96603,8 @@ async function handleCleanup() {
|
|
|
96487
96603
|
data: { message: "Worker cleaned up successfully" }
|
|
96488
96604
|
};
|
|
96489
96605
|
}
|
|
96490
|
-
var log62, workerState;
|
|
96491
|
-
var init_worker_main = __esm({
|
|
96492
|
-
"internal/application/worker/worker-main.ts"() {
|
|
96493
|
-
"use strict";
|
|
96494
|
-
init_worker_state();
|
|
96495
|
-
init_log();
|
|
96496
|
-
log62 = getDomainLogger("application", { component: "worker-main" });
|
|
96497
|
-
workerState = null;
|
|
96498
|
-
}
|
|
96499
|
-
});
|
|
96500
96606
|
|
|
96501
96607
|
// internal/application/worker/worker-node.ts
|
|
96502
|
-
var workerpool2 = __toESM2(require("workerpool"));
|
|
96503
|
-
init_worker_main();
|
|
96504
96608
|
async function processTask(task) {
|
|
96505
96609
|
return await handleWorkerTask(task);
|
|
96506
96610
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdfriday/foundry",
|
|
3
|
-
"version": "26.2.
|
|
3
|
+
"version": "26.2.10",
|
|
4
4
|
"description": "The core engine of MDFriday. Convert Markdown and shortcodes into fully themed static sites – Hugo-style, powered by TypeScript.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";(()=>{if(typeof self.importScripts=="function")try{self.importScripts("workerpool")}catch(e){console.error("Failed to import workerpool:",e)}self.addEventListener("message",async e=>{let o=e.data;try{self.postMessage({success:!1,error:"Browser worker needs special initialization. Use workerpool.pool() with proper options."})}catch(s){let r=s instanceof Error?s.message:String(s);self.postMessage({success:!1,error:r})}});})();
|