refresh review pipeline
CI / 1. BUILD (pull_request) Successful in 2s
CI / 2. TEST (pull_request) Failing after 19s
CI / 3. RESULT (pull_request) Skipped

This commit is contained in:
2026-08-07 06:05:58 +00:00
parent e1d7f59a38
commit 0eb30cf9d4
22 changed files with 2311 additions and 1620 deletions
+41 -10
View File
@@ -1,13 +1,36 @@
/**
* 輸出最上層的「區塊/章節」分隔標題(前綴空行 + `=== 標題 ===`)。
* 依 `spec-time-log` 規範產生台灣時區(Asia/Taipei)的固定格式時間戳 `yyyy/MM/dd HH:mm:ss`。
* 供本模組所有輸出函式在訊息前加上 `[時間]` 前綴使用。
*
* @param {Date} [date] - 要格式化的時間點;省略時使用呼叫當下的系統時間。
* @returns {string} 例如 `2026/08/07 12:39:43`。
*/
function formatTimestamp(date = new Date()) {
const parts = new Intl.DateTimeFormat('en-CA', {
timeZone: 'Asia/Taipei',
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hourCycle: 'h23',
}).formatToParts(date);
const map = Object.fromEntries(parts.map((p) => [p.type, p.value]));
return `${map.year}/${map.month}/${map.day} ${map.hour}:${map.minute}:${map.second}`;
}
/**
* 輸出最上層的「區塊/章節」分隔標題(前綴空行 + `[時間][INF]: === 標題 ===`)。
* 用於切分整個執行流程中彼此獨立的大段落(例如「環境檢查」「執行審查」「發布結果」),
* 讓 CI log 在視覺上分群;屬於最高層級的分隔,內部再以 step / line 等細分。
*
* @param {string} title - 區塊標題文字。
* @returns {void} 無回傳值,僅將標題寫入 stdout。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]` 前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function section(title) {
console.log(`\n=== ${title} ===`);
console.log(`\n[${formatTimestamp()}][INF]: === ${title} ===`);
}
/**
@@ -18,9 +41,10 @@ export function section(title) {
* @param {string} stepName - 步驟代號或編號,會以中括號包覆顯示。
* @param {string} title - 步驟標題文字。
* @returns {void} 無回傳值,僅將步驟標題寫入 stdout。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]` 前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function step(stepName, title) {
console.log(`\n[${stepName}] ${title}`);
console.log(`\n[${formatTimestamp()}][INF]: [${stepName}] ${title}`);
}
/**
@@ -30,9 +54,10 @@ export function step(stepName, title) {
*
* @param {string} message - 要顯示的明細訊息。
* @returns {void} 無回傳值,僅將明細寫入 stdout。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]` 前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function line(message) {
console.log(` - ${message}`);
console.log(`[${formatTimestamp()}][INF]: - ${message}`);
}
/**
@@ -41,9 +66,10 @@ export function line(message) {
*
* @param {string} message - 描述輸入內容的訊息。
* @returns {void} 無回傳值,僅將輸入描述寫入 stdout。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]` 前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function input(message) {
console.log(` ← 輸入:${message}`);
console.log(`[${formatTimestamp()}][INF]: ← 輸入:${message}`);
}
/**
@@ -52,9 +78,10 @@ export function input(message) {
*
* @param {string} message - 描述輸出內容的訊息。
* @returns {void} 無回傳值,僅將輸出描述寫入 stdout。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]` 前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function output(message) {
console.log(` → 輸出:${message}`);
console.log(`[${formatTimestamp()}][INF]: → 輸出:${message}`);
}
/**
@@ -65,9 +92,10 @@ export function output(message) {
* @param {boolean} passed - 結果是否通過;`true` 顯示成功、`false` 顯示失敗。
* @param {string} message - 描述該結果的訊息。
* @returns {void} 無回傳值,僅將結果寫入 stdout。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]` 前綴(成功為 `INF`、失敗為 `ERR`);此為單純呈現方式調整,仍維持一律寫入 stdout(不因失敗改寫 stderr),未改變輸出的實際語意或呼叫時機。
*/
export function result(passed, message) {
console.log(` ${passed ? '✅ 成功' : '❌ 失敗'}:${message}`);
console.log(`[${formatTimestamp()}][${passed ? 'INF' : 'ERR'}]: ${passed ? '✅ 成功' : '❌ 失敗'}:${message}`);
}
/**
@@ -77,9 +105,10 @@ export function result(passed, message) {
*
* @param {string} message - 描述成功內容的訊息。
* @returns {void} 無回傳值,僅將成功訊息寫入 stdout。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]` 前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function ok(message) {
console.log(` ✓ ${message}`);
console.log(`[${formatTimestamp()}][INF]: ✓ ${message}`);
}
/**
@@ -89,9 +118,10 @@ export function ok(message) {
*
* @param {string} message - 要顯示的警告訊息。
* @returns {void} 無回傳值,僅將警告訊息寫入 stderr。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]`(`WRN`)前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function warn(message) {
console.warn(` ! ${message}`);
console.warn(`[${formatTimestamp()}][WRN]: ! ${message}`);
}
/**
@@ -101,7 +131,8 @@ export function warn(message) {
*
* @param {string} message - 要顯示的錯誤訊息。
* @returns {void} 無回傳值,僅將錯誤訊息寫入 stderr。
* @remarks 依 spec-time-log 規範,訊息統一加上 `[時間][等級]`(`ERR`)前綴;此為單純呈現方式調整,未改變輸出的實際語意或呼叫時機。
*/
export function error(message) {
console.error(` x ${message}`);
console.error(`[${formatTimestamp()}][ERR]: x ${message}`);
}