@lark-apaas/devtool-kits 1.2.8-alpha.1 → 1.2.8-alpha.2
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.cjs +26 -203
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +26 -203
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -455,6 +455,31 @@ function replaceDefaultNowWithSql(source) {
|
|
|
455
455
|
}
|
|
456
456
|
__name(replaceDefaultNowWithSql, "replaceDefaultNowWithSql");
|
|
457
457
|
|
|
458
|
+
// src/helpers/gen-dbschema/helper/appendTableAliases.ts
|
|
459
|
+
var TABLE_ALIAS_MARKER = "// table aliases";
|
|
460
|
+
function appendTableAliases(source) {
|
|
461
|
+
const markerIndex = source.indexOf(`
|
|
462
|
+
${TABLE_ALIAS_MARKER}`);
|
|
463
|
+
const base = markerIndex === -1 ? source : source.slice(0, markerIndex);
|
|
464
|
+
const exportRegex = /export const\s+([A-Za-z_$][\w$]*)\s*=\s*pgTable\s*\(/g;
|
|
465
|
+
const tableExports = /* @__PURE__ */ new Set();
|
|
466
|
+
for (const match of base.matchAll(exportRegex)) {
|
|
467
|
+
const name = match[1];
|
|
468
|
+
tableExports.add(name);
|
|
469
|
+
}
|
|
470
|
+
if (tableExports.size === 0) {
|
|
471
|
+
return base;
|
|
472
|
+
}
|
|
473
|
+
const aliasLines = Array.from(tableExports).sort().map((name) => `export const ${name}Table = ${name};`).join("\n");
|
|
474
|
+
const prefix = base.trimEnd();
|
|
475
|
+
return `${prefix}
|
|
476
|
+
|
|
477
|
+
${TABLE_ALIAS_MARKER}
|
|
478
|
+
${aliasLines}
|
|
479
|
+
`;
|
|
480
|
+
}
|
|
481
|
+
__name(appendTableAliases, "appendTableAliases");
|
|
482
|
+
|
|
458
483
|
// src/helpers/gen-dbschema/postprocess.ts
|
|
459
484
|
function postprocessDrizzleSchema(targetPath) {
|
|
460
485
|
const resolvedPath = path2.resolve(targetPath);
|
|
@@ -482,6 +507,7 @@ function postprocessDrizzleSchema(targetPath) {
|
|
|
482
507
|
text = addSystemFieldComments(text);
|
|
483
508
|
text = tweakImports(text);
|
|
484
509
|
text = inlineCustomTypes(text);
|
|
510
|
+
text = appendTableAliases(text);
|
|
485
511
|
text = text.replace(/\r?\n/g, "\n");
|
|
486
512
|
text = collapseExtraBlankLines(text);
|
|
487
513
|
fs2.writeFileSync(resolvedPath, text, "utf8");
|
|
@@ -2318,144 +2344,6 @@ function generateUUID() {
|
|
|
2318
2344
|
});
|
|
2319
2345
|
}
|
|
2320
2346
|
__name(generateUUID, "generateUUID");
|
|
2321
|
-
async function readTriggerList(filePath, trigger, path7, limit, triggerID) {
|
|
2322
|
-
if (!await fileExists(filePath)) {
|
|
2323
|
-
return void 0;
|
|
2324
|
-
}
|
|
2325
|
-
const config = {
|
|
2326
|
-
maxEntriesPerTrace: 10,
|
|
2327
|
-
chunkSize: 64 * 1024
|
|
2328
|
-
};
|
|
2329
|
-
const builders = /* @__PURE__ */ new Map();
|
|
2330
|
-
const completedCalls = [];
|
|
2331
|
-
const createTraceBuilder = /* @__PURE__ */ __name((traceId) => ({
|
|
2332
|
-
traceId,
|
|
2333
|
-
entries: [],
|
|
2334
|
-
method: void 0,
|
|
2335
|
-
path: void 0,
|
|
2336
|
-
startTime: void 0,
|
|
2337
|
-
endTime: void 0,
|
|
2338
|
-
statusCode: void 0,
|
|
2339
|
-
durationMs: void 0,
|
|
2340
|
-
hasCompleted: false
|
|
2341
|
-
}), "createTraceBuilder");
|
|
2342
|
-
const shouldIncludeInCompletedCalls = /* @__PURE__ */ __name((builder) => {
|
|
2343
|
-
const alreadyAdded = completedCalls.some((call) => call.traceId === builder.traceId);
|
|
2344
|
-
if (alreadyAdded) {
|
|
2345
|
-
return false;
|
|
2346
|
-
}
|
|
2347
|
-
const isAutomationTrigger = builder.path?.endsWith(path7);
|
|
2348
|
-
if (!isAutomationTrigger) {
|
|
2349
|
-
return false;
|
|
2350
|
-
}
|
|
2351
|
-
if (trigger && builder.entries.length > 0) {
|
|
2352
|
-
const requestEntry = builder.entries.find((e) => e.request_body?.trigger);
|
|
2353
|
-
if (requestEntry?.request_body?.trigger) {
|
|
2354
|
-
return String(requestEntry.request_body.trigger) === trigger && (triggerID ? requestEntry?.request_body?.triggerID === triggerID : true);
|
|
2355
|
-
}
|
|
2356
|
-
return false;
|
|
2357
|
-
}
|
|
2358
|
-
return true;
|
|
2359
|
-
}, "shouldIncludeInCompletedCalls");
|
|
2360
|
-
const updateBuilderMetadata = /* @__PURE__ */ __name((builder, entry) => {
|
|
2361
|
-
if (entry.method && !builder.method) builder.method = String(entry.method);
|
|
2362
|
-
if (entry.path && !builder.path) builder.path = String(entry.path);
|
|
2363
|
-
builder.entries.push(entry);
|
|
2364
|
-
if (builder.entries.length > config.maxEntriesPerTrace) {
|
|
2365
|
-
builder.entries.shift();
|
|
2366
|
-
}
|
|
2367
|
-
if (shouldIncludeInCompletedCalls(builder)) {
|
|
2368
|
-
completedCalls.push(builder);
|
|
2369
|
-
if (limit && completedCalls.length > limit) {
|
|
2370
|
-
completedCalls.pop();
|
|
2371
|
-
}
|
|
2372
|
-
}
|
|
2373
|
-
}, "updateBuilderMetadata");
|
|
2374
|
-
const handleRequestCompleted = /* @__PURE__ */ __name((builder, entry, message) => {
|
|
2375
|
-
builder.hasCompleted = true;
|
|
2376
|
-
builder.endTime = entry.time;
|
|
2377
|
-
builder.statusCode = extractNumber(message, /status_code:\s*(\d+)/);
|
|
2378
|
-
builder.durationMs = extractNumber(message, /duration_ms:\s*(\d+)/);
|
|
2379
|
-
if (!builder.path && entry.path) {
|
|
2380
|
-
builder.path = String(entry.path);
|
|
2381
|
-
}
|
|
2382
|
-
if (shouldIncludeInCompletedCalls(builder)) {
|
|
2383
|
-
completedCalls.push(builder);
|
|
2384
|
-
if (limit && completedCalls.length > limit) {
|
|
2385
|
-
completedCalls.pop();
|
|
2386
|
-
}
|
|
2387
|
-
}
|
|
2388
|
-
}, "handleRequestCompleted");
|
|
2389
|
-
const processLogEntry = /* @__PURE__ */ __name((entry) => {
|
|
2390
|
-
const { trace_id: traceId, message = "" } = entry;
|
|
2391
|
-
if (!traceId) return;
|
|
2392
|
-
let builder = builders.get(traceId);
|
|
2393
|
-
if (!builder) {
|
|
2394
|
-
builder = createTraceBuilder(traceId);
|
|
2395
|
-
builders.set(traceId, builder);
|
|
2396
|
-
}
|
|
2397
|
-
updateBuilderMetadata(builder, entry);
|
|
2398
|
-
if (!builder.hasCompleted && (message.includes("HTTP request completed") || message.includes("HTTP request failed"))) {
|
|
2399
|
-
handleRequestCompleted(builder, entry, message);
|
|
2400
|
-
}
|
|
2401
|
-
if (message.includes("HTTP request started") && !builder.startTime) {
|
|
2402
|
-
builder.startTime = entry.time;
|
|
2403
|
-
}
|
|
2404
|
-
}, "processLogEntry");
|
|
2405
|
-
const processLine = /* @__PURE__ */ __name((line) => {
|
|
2406
|
-
const entry = parseLogLine2(line);
|
|
2407
|
-
if (entry?.trace_id) {
|
|
2408
|
-
processLogEntry(entry);
|
|
2409
|
-
}
|
|
2410
|
-
}, "processLine");
|
|
2411
|
-
await readFileReverse(filePath, config.chunkSize, processLine);
|
|
2412
|
-
return {
|
|
2413
|
-
page: 1,
|
|
2414
|
-
pageSize: completedCalls.length,
|
|
2415
|
-
totalCalls: completedCalls.length,
|
|
2416
|
-
totalPages: 1,
|
|
2417
|
-
calls: completedCalls.map((builder) => ({
|
|
2418
|
-
traceId: builder.traceId,
|
|
2419
|
-
method: builder.method,
|
|
2420
|
-
path: builder.path,
|
|
2421
|
-
startTime: builder.startTime,
|
|
2422
|
-
endTime: builder.endTime,
|
|
2423
|
-
statusCode: builder.statusCode,
|
|
2424
|
-
durationMs: builder.durationMs,
|
|
2425
|
-
entries: builder.entries.slice().reverse()
|
|
2426
|
-
}))
|
|
2427
|
-
};
|
|
2428
|
-
}
|
|
2429
|
-
__name(readTriggerList, "readTriggerList");
|
|
2430
|
-
async function readTriggerDetail(filePath, path7, instanceID) {
|
|
2431
|
-
const exists = await fileExists(filePath);
|
|
2432
|
-
if (!exists) {
|
|
2433
|
-
return void 0;
|
|
2434
|
-
}
|
|
2435
|
-
const matches = [];
|
|
2436
|
-
const stream = createReadStream(filePath, {
|
|
2437
|
-
encoding: "utf8"
|
|
2438
|
-
});
|
|
2439
|
-
const rl = createInterface({
|
|
2440
|
-
input: stream,
|
|
2441
|
-
crlfDelay: Infinity
|
|
2442
|
-
});
|
|
2443
|
-
for await (const line of rl) {
|
|
2444
|
-
const entry = parseLogLine2(line);
|
|
2445
|
-
if (!entry) continue;
|
|
2446
|
-
const isAutomationTrigger = entry.path?.endsWith(path7);
|
|
2447
|
-
const hasInstanceID = entry.instance_id === instanceID && entry.trigger;
|
|
2448
|
-
if (!isAutomationTrigger || !hasInstanceID) continue;
|
|
2449
|
-
matches.push(entry);
|
|
2450
|
-
}
|
|
2451
|
-
rl.close();
|
|
2452
|
-
stream.close();
|
|
2453
|
-
return {
|
|
2454
|
-
instanceID,
|
|
2455
|
-
entries: matches
|
|
2456
|
-
};
|
|
2457
|
-
}
|
|
2458
|
-
__name(readTriggerDetail, "readTriggerDetail");
|
|
2459
2347
|
|
|
2460
2348
|
// src/middlewares/dev-logs/controller.ts
|
|
2461
2349
|
function handleNotFound(res, filePath, message = "Log file not found") {
|
|
@@ -2575,59 +2463,6 @@ function createGetServerLogsHandler(logDir) {
|
|
|
2575
2463
|
};
|
|
2576
2464
|
}
|
|
2577
2465
|
__name(createGetServerLogsHandler, "createGetServerLogsHandler");
|
|
2578
|
-
function createGetTriggerListHandler(logDir) {
|
|
2579
|
-
const traceLogPath = join3(logDir, "trace.log");
|
|
2580
|
-
return async (req, res) => {
|
|
2581
|
-
const trigger = typeof req.query.trigger === "string" ? req.query.trigger.trim() : void 0;
|
|
2582
|
-
if (!trigger) {
|
|
2583
|
-
return res.status(400).json({
|
|
2584
|
-
message: "trigger is required"
|
|
2585
|
-
});
|
|
2586
|
-
}
|
|
2587
|
-
const triggerID = typeof req.query.triggerID === "string" ? req.query.triggerID.trim() : void 0;
|
|
2588
|
-
const path7 = typeof req.query.path === "string" ? req.query.path.trim() : "/__innerapi__/automation/invoke";
|
|
2589
|
-
const limit = parseLimit(req.query.limit, 10, 200);
|
|
2590
|
-
try {
|
|
2591
|
-
const result = await readTriggerList(traceLogPath, trigger, path7, limit, triggerID);
|
|
2592
|
-
if (!result) {
|
|
2593
|
-
return handleNotFound(res, traceLogPath);
|
|
2594
|
-
}
|
|
2595
|
-
res.json({
|
|
2596
|
-
file: getRelativePath(traceLogPath),
|
|
2597
|
-
path: path7,
|
|
2598
|
-
...result
|
|
2599
|
-
});
|
|
2600
|
-
} catch (error) {
|
|
2601
|
-
handleError(res, error, "Failed to read trace log");
|
|
2602
|
-
}
|
|
2603
|
-
};
|
|
2604
|
-
}
|
|
2605
|
-
__name(createGetTriggerListHandler, "createGetTriggerListHandler");
|
|
2606
|
-
function createGetTriggerDetailHandler(logDir) {
|
|
2607
|
-
const traceLogPath = join3(logDir, "server.log");
|
|
2608
|
-
return async (req, res) => {
|
|
2609
|
-
const instanceID = (req.params.instanceID || "").trim();
|
|
2610
|
-
if (!instanceID) {
|
|
2611
|
-
return res.status(400).json({
|
|
2612
|
-
message: "instanceID is required"
|
|
2613
|
-
});
|
|
2614
|
-
}
|
|
2615
|
-
const path7 = typeof req.query.path === "string" ? req.query.path.trim() : "/__innerapi__/automation/invoke";
|
|
2616
|
-
try {
|
|
2617
|
-
const result = await readTriggerDetail(traceLogPath, path7, instanceID);
|
|
2618
|
-
if (!result) {
|
|
2619
|
-
return handleNotFound(res, traceLogPath);
|
|
2620
|
-
}
|
|
2621
|
-
res.json({
|
|
2622
|
-
file: getRelativePath(traceLogPath),
|
|
2623
|
-
...result
|
|
2624
|
-
});
|
|
2625
|
-
} catch (error) {
|
|
2626
|
-
handleError(res, error, "Failed to read trace log");
|
|
2627
|
-
}
|
|
2628
|
-
};
|
|
2629
|
-
}
|
|
2630
|
-
__name(createGetTriggerDetailHandler, "createGetTriggerDetailHandler");
|
|
2631
2466
|
|
|
2632
2467
|
// src/middlewares/dev-logs/health.controller.ts
|
|
2633
2468
|
import http2 from "http";
|
|
@@ -2704,8 +2539,6 @@ function createDevLogRouter(options = {}) {
|
|
|
2704
2539
|
router.get("/trace/recent", createGetRecentTracesHandler(logDir));
|
|
2705
2540
|
router.get("/files/:fileName", createGetLogFileHandler(logDir));
|
|
2706
2541
|
router.get("/server-logs", createGetServerLogsHandler(logDir));
|
|
2707
|
-
router.get("/trace/trigger/list", createGetTriggerListHandler(logDir));
|
|
2708
|
-
router.get("/trace/trigger/:instanceID", createGetTriggerDetailHandler(logDir));
|
|
2709
2542
|
router.get("/health", createHealthCheckHandler());
|
|
2710
2543
|
return router;
|
|
2711
2544
|
}
|
|
@@ -2732,16 +2565,6 @@ var DEV_LOGS_ROUTES = [
|
|
|
2732
2565
|
method: "GET",
|
|
2733
2566
|
path: "/server-logs",
|
|
2734
2567
|
description: "Get server logs in ServerLog format (compatible with frontend)"
|
|
2735
|
-
},
|
|
2736
|
-
{
|
|
2737
|
-
method: "GET",
|
|
2738
|
-
path: "/trace/trigger/list",
|
|
2739
|
-
description: "Get trigger list (automation trigger) in trace.log"
|
|
2740
|
-
},
|
|
2741
|
-
{
|
|
2742
|
-
method: "GET",
|
|
2743
|
-
path: "/trace/trigger/:instanceID",
|
|
2744
|
-
description: "Get trigger detail (automation trigger) in trace.log by instanceID"
|
|
2745
2568
|
}
|
|
2746
2569
|
];
|
|
2747
2570
|
function createDevLogsMiddleware(options = {}) {
|