From 0756bf12d10cf1b7f78c571de0a9ad69cbaeb7ca Mon Sep 17 00:00:00 2001
From: curtis <curtis@i-mps.com>
Date: 星期一, 30 三月 2026 14:24:17 +0800
Subject: [PATCH] fix: 更新內部引用方法參照
---
scripts/list_dependencies_run.js | 99 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 99 insertions(+), 0 deletions(-)
diff --git a/scripts/list_dependencies_run.js b/scripts/list_dependencies_run.js
new file mode 100644
index 0000000..f5eeca9
--- /dev/null
+++ b/scripts/list_dependencies_run.js
@@ -0,0 +1,99 @@
+const img = require('./list_image_dependencies')
+const io = require('./list_io_dependencies')
+const scan = require('./list_scan_dependencies')
+const transp = require('./list_transport_dependencies')
+const fs = require("fs");
+const path = require("path");
+const baseDir = path.join(process.cwd(), 'scripts/dist');
+
+const IMG_DEPS = img.listDependencies()
+const IO_DEPS = io.listDependencies()
+const SCAN_DEPS = scan.listDependencies()
+const TRANS_DEPS = transp.listDependencies()
+
+/**
+ * 解析單行 CSV 字串,能正確處理被引號包覆且內部含有逗號的欄位。
+ * @param {string} line - 要解析的單行 CSV 字串。
+ * @returns {string[]} 解析後的欄位陣列。
+ */
+function parseCsvLine(line) {
+ const fields = [];
+ let currentField = '';
+ let inQuotes = false;
+
+ for (let i = 0; i < line.length; i++) {
+ const char = line[i];
+ if (char === '"') {
+ // 處理 CSV 中用兩個雙引號來代表一個雙引號的轉義規則
+ if (inQuotes && line[i + 1] === '"') {
+ currentField += '"';
+ i++; // 跳過下一個引號
+ } else {
+ inQuotes = !inQuotes; // 進入或離開引號模式
+ }
+ } else if (char === ',' && !inQuotes) {
+ // 當不在引號內且遇到逗號時,才視為一個欄位的結束
+ fields.push(currentField);
+ currentField = '';
+ } else {
+ // 一般字元,直接附加到當前欄位
+ currentField += char;
+ }
+ }
+ // 將最後一個欄位加入陣列
+ fields.push(currentField);
+
+ return fields;
+}
+
+// 您可以這樣使用它:
+// const [pick, methodName, fileName, lineno, deps, desc, source] = parseCsvLine(line);
+function flatten(arrOStr) {
+ if (Array.isArray(arrOStr)) {
+ return arrOStr.reduce((acc, cur)=>{
+ if (typeof cur === 'string') acc.push(cur)
+ else acc.push(...flatten(cur))
+ return acc
+ }, [])
+ }
+ return arrOStr
+}
+async function main() {
+ const imgDeps = (await IMG_DEPS).filter((_) => _.csvContent).map((_) => _.csvContent.split('\n'))
+ const ioDeps = (await IO_DEPS).filter((_) => _.csvContent).map((_) => _.csvContent.split('\n'))
+ const scanDeps = (await SCAN_DEPS).filter((_) => _.csvContent).map((_) => _.csvContent.split('\n'))
+ const transDeps = (await TRANS_DEPS).filter((_) => _.csvContent).map((_) => _.csvContent.split('\n'))
+ const csvHeader = (await IMG_DEPS)[0].csvHeader
+ const allCsvContent = flatten([
+ ...imgDeps,
+ ...ioDeps,
+ ...scanDeps,
+ ...transDeps
+ ])
+
+ const keep = {}
+ const results = []
+ allCsvContent.forEach((line)=>{
+ const [pick, methodName, fileName, lineno, deps, desc, source] = parseCsvLine(line)
+ const ident = `${fileName}-${methodName}`
+ keep[ident] ??= {}
+ if (keep[ident][deps])
+ return
+ keep[ident][deps] ??= {
+ source, lineno, desc
+ }
+ results.push({
+ pick, methodName, fileName, lineno, deps, desc, source
+ })
+ })
+
+ const csvContent = results.map(r =>
+ `${r.pick},${r.methodName},${r.fileName},${r.lineno},${r.deps},${r.desc},${r.source}`
+ ).join('\n');
+ const outputCsv = path.join(baseDir, `deps.all.csv`)
+ fs.writeFileSync(outputCsv, csvHeader + csvContent, 'utf8');
+}
+
+main()
+
+
--
Gitblit v1.8.0