@lage-run/reporters 1.3.0 → 1.3.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/CHANGELOG.json CHANGED
@@ -2,7 +2,22 @@
2
2
  "name": "@lage-run/reporters",
3
3
  "entries": [
4
4
  {
5
- "date": "Wed, 12 Feb 2025 00:08:19 GMT",
5
+ "date": "Sat, 29 Mar 2025 02:16:38 GMT",
6
+ "version": "1.3.0",
7
+ "tag": "@lage-run/reporters_v1.3.0",
8
+ "comments": {
9
+ "none": [
10
+ {
11
+ "author": "elcraig@microsoft.com",
12
+ "package": "@lage-run/reporters",
13
+ "commit": "a680ab60dcddd84808f223a1b5f38a16e868b66f",
14
+ "comment": "Sync versions, and use workspace:^ versions for local deps"
15
+ }
16
+ ]
17
+ }
18
+ },
19
+ {
20
+ "date": "Wed, 12 Feb 2025 00:08:30 GMT",
6
21
  "version": "1.3.0",
7
22
  "tag": "@lage-run/reporters_v1.3.0",
8
23
  "comments": {
package/CHANGELOG.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Change Log - @lage-run/reporters
2
2
 
3
- <!-- This log was last generated on Wed, 12 Feb 2025 00:08:19 GMT and should not be manually modified. -->
3
+ <!-- This log was last generated on Wed, 12 Feb 2025 00:08:30 GMT and should not be manually modified. -->
4
4
 
5
5
  <!-- Start content -->
6
6
 
7
7
  ## 1.3.0
8
8
 
9
- Wed, 12 Feb 2025 00:08:19 GMT
9
+ Wed, 12 Feb 2025 00:08:30 GMT
10
10
 
11
11
  ### Minor changes
12
12
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/AdoReporter.ts"],"sourcesContent":["import { formatDuration, hrToSeconds } from \"@lage-run/format-hrtime\";\nimport { isTargetStatusLogEntry } from \"./isTargetStatusLogEntry.js\";\nimport { LogLevel } from \"@lage-run/logger\";\nimport chalk from \"chalk\";\nimport type { Reporter, LogEntry } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetStatus } from \"@lage-run/scheduler-types\";\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\nimport type { Writable } from \"stream\";\nimport { slowestTargetRuns } from \"./slowestTargetRuns.js\";\n\nconst colors = {\n [LogLevel.info]: chalk.white,\n [LogLevel.verbose]: chalk.gray,\n [LogLevel.warn]: chalk.white,\n [LogLevel.error]: chalk.white,\n [LogLevel.silly]: chalk.green,\n task: chalk.cyan,\n pkg: chalk.magenta,\n ok: chalk.green,\n error: chalk.red,\n warn: chalk.yellow,\n};\n\nconst logLevelLabel = {\n [LogLevel.info]: \"INFO\",\n [LogLevel.warn]: \"WARN\",\n [LogLevel.error]: \"ERR!\",\n [LogLevel.silly]: \"SILLY\",\n [LogLevel.verbose]: \"VERB\",\n};\n\nfunction getTaskLogPrefix(pkg: string, task: string) {\n return `${colors.pkg(pkg)} ${colors.task(task)}`;\n}\n\nfunction normalize(prefixOrMessage: string, message?: string) {\n if (typeof message === \"string\") {\n const prefix = prefixOrMessage;\n return { prefix, message };\n } else {\n const prefix = \"\";\n const message = prefixOrMessage;\n return { prefix, message };\n }\n}\n\nfunction format(level: LogLevel, prefix: string, message: string) {\n return `${logLevelLabel[level]}: ${prefix} ${message}\\n`;\n}\n\nexport class AdoReporter implements Reporter {\n logStream: Writable = process.stdout;\n\n private logEntries = new Map<string, LogEntry[]>();\n readonly groupedEntries = new Map<string, LogEntry[]>();\n\n constructor(private options: { logLevel?: LogLevel; grouped?: boolean }) {\n options.logLevel = options.logLevel || LogLevel.info;\n }\n\n log(entry: LogEntry<any>) {\n if (entry.data && entry.data.target && entry.data.target.hidden) {\n return;\n }\n\n if (entry.data && entry.data.target) {\n if (!this.logEntries.has(entry.data.target.id)) {\n this.logEntries.set(entry.data.target.id, []);\n }\n\n this.logEntries.get(entry.data.target.id)!.push(entry);\n }\n\n if (this.options.logLevel! >= entry.level) {\n if (this.options.grouped && entry.data?.target) {\n return this.logTargetEntryByGroup(entry);\n }\n\n return this.logTargetEntry(entry);\n }\n }\n\n private logTargetEntry(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const colorFn = colors[entry.level];\n const data = entry.data!;\n\n if (isTargetStatusLogEntry(data)) {\n const { target, hash, duration } = data;\n const { packageName, task } = target;\n\n const normalizedArgs = this.options.grouped\n ? normalize(entry.msg)\n : normalize(getTaskLogPrefix(packageName ?? \"<root>\", task), entry.msg);\n\n const pkgTask = this.options.grouped ? `${chalk.magenta(packageName)} ${chalk.cyan(task)}` : \"\";\n\n switch (data.status) {\n case \"running\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.ok(\"➔\")} start ${pkgTask}`)));\n\n case \"success\":\n return this.logStream.write(\n format(\n entry.level,\n normalizedArgs.prefix,\n colorFn(`${colors.ok(\"✓\")} done ${pkgTask} - ${formatDuration(hrToSeconds(duration!))}`)\n )\n );\n\n case \"failed\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.error(\"✖\")} fail ${pkgTask}`)));\n\n case \"skipped\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.ok(\"»\")} skip ${pkgTask} - ${hash!}`)));\n\n case \"aborted\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.warn(\"-\")} aborted ${pkgTask}`)));\n\n case \"queued\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.warn(\"…\")} aborted ${pkgTask}`)));\n }\n } else if (entry?.data?.target) {\n const { target } = data;\n const { packageName, task } = target;\n const normalizedArgs = this.options.grouped\n ? normalize(entry.msg)\n : normalize(getTaskLogPrefix(packageName ?? \"<root>\", task), entry.msg);\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(\"| \" + normalizedArgs.message)));\n } else if (entry?.msg.trim() !== \"\") {\n return this.logStream.write(format(entry.level, \"\", entry.msg));\n }\n }\n\n private logTargetEntryByGroup(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const data = entry.data!;\n\n const target = data.target;\n const { id } = target;\n\n this.groupedEntries.set(id, this.groupedEntries.get(id) || []);\n this.groupedEntries.get(id)?.push(entry);\n\n if (isTargetStatusLogEntry(data)) {\n if (data.status === \"success\" || data.status === \"failed\" || data.status === \"skipped\" || data.status === \"aborted\") {\n const { status, duration } = data;\n this.logStream.write(\n `##[group] ${colors.pkg(data.target.packageName ?? \"<root>\")} ${colors.task(data.target.task)} ${status}${\n duration ? `, took ${formatDuration(hrToSeconds(duration))}` : \"\"\n }\\n`\n );\n const entries = this.groupedEntries.get(id)! as LogEntry<TargetStatusEntry>[];\n\n for (const targetEntry of entries) {\n this.logTargetEntry(targetEntry);\n }\n\n this.logStream.write(`##[endgroup]\\n`);\n }\n }\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, targetRunByStatus, duration } = schedulerRunSummary;\n const { failed, aborted, skipped, success, pending } = targetRunByStatus;\n\n const statusColorFn: {\n [status in TargetStatus]: chalk.Chalk;\n } = {\n success: chalk.greenBright,\n failed: chalk.redBright,\n skipped: chalk.gray,\n running: chalk.yellow,\n pending: chalk.gray,\n aborted: chalk.red,\n queued: chalk.magenta,\n };\n\n this.logStream.write(chalk.cyanBright(`##[section]Summary\\n`));\n\n if (targetRuns.size > 0) {\n const slowestTargets = slowestTargetRuns([...targetRuns.values()]);\n\n for (const wrappedTarget of slowestTargets) {\n const colorFn = statusColorFn[wrappedTarget.status];\n const target = wrappedTarget.target;\n\n this.logStream.write(\n format(\n LogLevel.info,\n getTaskLogPrefix(target.packageName || \"[GLOBAL]\", target.task),\n colorFn(\n `${wrappedTarget.status}${wrappedTarget.duration ? `, took ${formatDuration(hrToSeconds(wrappedTarget.duration))}` : \"\"}`\n )\n )\n );\n }\n\n this.logStream.write(\n `[Tasks Count] success: ${success.length}, skipped: ${skipped.length}, pending: ${pending.length}, aborted: ${aborted.length}\\n`\n );\n } else {\n this.logStream.write(\"Nothing has been run.\\n\");\n }\n\n if (failed && failed.length > 0) {\n let packagesMessage = `##vso[task.logissue type=error]Your build failed on the following packages => `;\n\n for (const targetId of failed) {\n const target = targetRuns.get(targetId)?.target;\n\n if (target) {\n const { packageName, task } = target;\n const taskLogs = this.logEntries.get(targetId);\n\n packagesMessage += `[${packageName} ${task}], `;\n\n this.logStream.write(`##[error] [${chalk.magenta(packageName)} ${chalk.cyan(task)}] ${chalk.redBright(\"ERROR DETECTED\")}\\n`);\n\n if (taskLogs) {\n for (const entry of taskLogs) {\n // Log each entry separately to prevent truncation\n this.logStream.write(`##[error] ${entry.msg}\\n`);\n }\n }\n }\n }\n\n packagesMessage += \"find the error logs above with the prefix '##[error]!'\\n\";\n this.logStream.write(packagesMessage);\n }\n\n this.logStream.write(format(LogLevel.info, \"\", `Took a total of ${formatDuration(hrToSeconds(duration))} to complete`));\n }\n}\n"],"names":["AdoReporter","colors","LogLevel","info","chalk","white","verbose","gray","warn","error","silly","green","task","cyan","pkg","magenta","ok","red","yellow","logLevelLabel","getTaskLogPrefix","normalize","prefixOrMessage","message","prefix","format","level","log","entry","data","target","hidden","logEntries","has","id","set","get","push","options","logLevel","grouped","logTargetEntryByGroup","logTargetEntry","colorFn","isTargetStatusLogEntry","hash","duration","packageName","normalizedArgs","msg","pkgTask","status","logStream","write","formatDuration","hrToSeconds","trim","groupedEntries","entries","targetEntry","summarize","schedulerRunSummary","targetRuns","targetRunByStatus","failed","aborted","skipped","success","pending","statusColorFn","greenBright","redBright","running","queued","cyanBright","size","slowestTargets","slowestTargetRuns","values","wrappedTarget","length","packagesMessage","targetId","taskLogs","constructor","process","stdout","Map"],"mappings":";;;;+BAkDaA;;;eAAAA;;;8BAlD+B;wCACL;wBACd;8DACP;mCAKgB;;;;;;;;;;;;;;;;;;;AAElC,MAAMC,SAAS;IACb,CAACC,gBAAQ,CAACC,IAAI,CAAC,EAAEC,cAAK,CAACC,KAAK;IAC5B,CAACH,gBAAQ,CAACI,OAAO,CAAC,EAAEF,cAAK,CAACG,IAAI;IAC9B,CAACL,gBAAQ,CAACM,IAAI,CAAC,EAAEJ,cAAK,CAACC,KAAK;IAC5B,CAACH,gBAAQ,CAACO,KAAK,CAAC,EAAEL,cAAK,CAACC,KAAK;IAC7B,CAACH,gBAAQ,CAACQ,KAAK,CAAC,EAAEN,cAAK,CAACO,KAAK;IAC7BC,MAAMR,cAAK,CAACS,IAAI;IAChBC,KAAKV,cAAK,CAACW,OAAO;IAClBC,IAAIZ,cAAK,CAACO,KAAK;IACfF,OAAOL,cAAK,CAACa,GAAG;IAChBT,MAAMJ,cAAK,CAACc,MAAM;AACpB;AAEA,MAAMC,gBAAgB;IACpB,CAACjB,gBAAQ,CAACC,IAAI,CAAC,EAAE;IACjB,CAACD,gBAAQ,CAACM,IAAI,CAAC,EAAE;IACjB,CAACN,gBAAQ,CAACO,KAAK,CAAC,EAAE;IAClB,CAACP,gBAAQ,CAACQ,KAAK,CAAC,EAAE;IAClB,CAACR,gBAAQ,CAACI,OAAO,CAAC,EAAE;AACtB;AAEA,SAASc,iBAAiBN,GAAW,EAAEF,IAAY;IACjD,OAAO,GAAGX,OAAOa,GAAG,CAACA,KAAK,CAAC,EAAEb,OAAOW,IAAI,CAACA,OAAO;AAClD;AAEA,SAASS,UAAUC,eAAuB,EAAEC,OAAgB;IAC1D,IAAI,OAAOA,YAAY,UAAU;QAC/B,MAAMC,SAASF;QACf,OAAO;YAAEE;YAAQD;QAAQ;IAC3B,OAAO;QACL,MAAMC,SAAS;QACf,MAAMD,UAAUD;QAChB,OAAO;YAAEE;YAAQD;QAAQ;IAC3B;AACF;AAEA,SAASE,OAAOC,KAAe,EAAEF,MAAc,EAAED,OAAe;IAC9D,OAAO,GAAGJ,aAAa,CAACO,MAAM,CAAC,EAAE,EAAEF,OAAO,CAAC,EAAED,QAAQ,EAAE,CAAC;AAC1D;AAEO,MAAMvB;IAUX2B,IAAIC,KAAoB,EAAE;QACxB,IAAIA,MAAMC,IAAI,IAAID,MAAMC,IAAI,CAACC,MAAM,IAAIF,MAAMC,IAAI,CAACC,MAAM,CAACC,MAAM,EAAE;YAC/D;QACF;QAEA,IAAIH,MAAMC,IAAI,IAAID,MAAMC,IAAI,CAACC,MAAM,EAAE;YACnC,IAAI,CAAC,IAAI,CAACE,UAAU,CAACC,GAAG,CAACL,MAAMC,IAAI,CAACC,MAAM,CAACI,EAAE,GAAG;gBAC9C,IAAI,CAACF,UAAU,CAACG,GAAG,CAACP,MAAMC,IAAI,CAACC,MAAM,CAACI,EAAE,EAAE,EAAE;YAC9C;YAEA,IAAI,CAACF,UAAU,CAACI,GAAG,CAACR,MAAMC,IAAI,CAACC,MAAM,CAACI,EAAE,EAAGG,IAAI,CAACT;QAClD;QAEA,IAAI,IAAI,CAACU,OAAO,CAACC,QAAQ,IAAKX,MAAMF,KAAK,EAAE;YACzC,IAAI,IAAI,CAACY,OAAO,CAACE,OAAO,IAAIZ,MAAMC,IAAI,EAAEC,QAAQ;gBAC9C,OAAO,IAAI,CAACW,qBAAqB,CAACb;YACpC;YAEA,OAAO,IAAI,CAACc,cAAc,CAACd;QAC7B;IACF;IAEQc,eAAed,KAAuD,EAAE;QAC9E,MAAMe,UAAU1C,MAAM,CAAC2B,MAAMF,KAAK,CAAC;QACnC,MAAMG,OAAOD,MAAMC,IAAI;QAEvB,IAAIe,IAAAA,8CAAsB,EAACf,OAAO;YAChC,MAAM,EAAEC,MAAM,EAAEe,IAAI,EAAEC,QAAQ,EAAE,GAAGjB;YACnC,MAAM,EAAEkB,WAAW,EAAEnC,IAAI,EAAE,GAAGkB;YAE9B,MAAMkB,iBAAiB,IAAI,CAACV,OAAO,CAACE,OAAO,GACvCnB,UAAUO,MAAMqB,GAAG,IACnB5B,UAAUD,iBAAiB2B,eAAe,UAAUnC,OAAOgB,MAAMqB,GAAG;YAExE,MAAMC,UAAU,IAAI,CAACZ,OAAO,CAACE,OAAO,GAAG,GAAGpC,cAAK,CAACW,OAAO,CAACgC,aAAa,CAAC,EAAE3C,cAAK,CAACS,IAAI,CAACD,OAAO,GAAG;YAE7F,OAAQiB,KAAKsB,MAAM;gBACjB,KAAK;oBACH,OAAO,IAAI,CAACC,SAAS,CAACC,KAAK,CAAC5B,OAAOG,MAAMF,KAAK,EAAEsB,eAAexB,MAAM,EAAEmB,QAAQ,GAAG1C,OAAOe,EAAE,CAAC,KAAK,OAAO,EAAEkC,SAAS;gBAErH,KAAK;oBACH,OAAO,IAAI,CAACE,SAAS,CAACC,KAAK,CACzB5B,OACEG,MAAMF,KAAK,EACXsB,eAAexB,MAAM,EACrBmB,QAAQ,GAAG1C,OAAOe,EAAE,CAAC,KAAK,MAAM,EAAEkC,QAAQ,GAAG,EAAEI,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAACT,YAAa;gBAI7F,KAAK;oBACH,OAAO,IAAI,CAACM,SAAS,CAACC,KAAK,CAAC5B,OAAOG,MAAMF,KAAK,EAAEsB,eAAexB,MAAM,EAAEmB,QAAQ,GAAG1C,OAAOQ,KAAK,CAAC,KAAK,MAAM,EAAEyC,SAAS;gBAEvH,KAAK;oBACH,OAAO,IAAI,CAACE,SAAS,CAACC,KAAK,CAAC5B,OAAOG,MAAMF,KAAK,EAAEsB,eAAexB,MAAM,EAAEmB,QAAQ,GAAG1C,OAAOe,EAAE,CAAC,KAAK,MAAM,EAAEkC,QAAQ,GAAG,EAAEL,MAAO;gBAE/H,KAAK;oBACH,OAAO,IAAI,CAACO,SAAS,CAACC,KAAK,CAAC5B,OAAOG,MAAMF,KAAK,EAAEsB,eAAexB,MAAM,EAAEmB,QAAQ,GAAG1C,OAAOO,IAAI,CAAC,KAAK,SAAS,EAAE0C,SAAS;gBAEzH,KAAK;oBACH,OAAO,IAAI,CAACE,SAAS,CAACC,KAAK,CAAC5B,OAAOG,MAAMF,KAAK,EAAEsB,eAAexB,MAAM,EAAEmB,QAAQ,GAAG1C,OAAOO,IAAI,CAAC,KAAK,SAAS,EAAE0C,SAAS;YAC3H;QACF,OAAO,IAAItB,OAAOC,MAAMC,QAAQ;YAC9B,MAAM,EAAEA,MAAM,EAAE,GAAGD;YACnB,MAAM,EAAEkB,WAAW,EAAEnC,IAAI,EAAE,GAAGkB;YAC9B,MAAMkB,iBAAiB,IAAI,CAACV,OAAO,CAACE,OAAO,GACvCnB,UAAUO,MAAMqB,GAAG,IACnB5B,UAAUD,iBAAiB2B,eAAe,UAAUnC,OAAOgB,MAAMqB,GAAG;YACxE,OAAO,IAAI,CAACG,SAAS,CAACC,KAAK,CAAC5B,OAAOG,MAAMF,KAAK,EAAEsB,eAAexB,MAAM,EAAEmB,QAAQ,QAAQK,eAAezB,OAAO;QAC/G,OAAO,IAAIK,OAAOqB,IAAIO,WAAW,IAAI;YACnC,OAAO,IAAI,CAACJ,SAAS,CAACC,KAAK,CAAC5B,OAAOG,MAAMF,KAAK,EAAE,IAAIE,MAAMqB,GAAG;QAC/D;IACF;IAEQR,sBAAsBb,KAAuD,EAAE;QACrF,MAAMC,OAAOD,MAAMC,IAAI;QAEvB,MAAMC,SAASD,KAAKC,MAAM;QAC1B,MAAM,EAAEI,EAAE,EAAE,GAAGJ;QAEf,IAAI,CAAC2B,cAAc,CAACtB,GAAG,CAACD,IAAI,IAAI,CAACuB,cAAc,CAACrB,GAAG,CAACF,OAAO,EAAE;QAC7D,IAAI,CAACuB,cAAc,CAACrB,GAAG,CAACF,KAAKG,KAAKT;QAElC,IAAIgB,IAAAA,8CAAsB,EAACf,OAAO;YAChC,IAAIA,KAAKsB,MAAM,KAAK,aAAatB,KAAKsB,MAAM,KAAK,YAAYtB,KAAKsB,MAAM,KAAK,aAAatB,KAAKsB,MAAM,KAAK,WAAW;gBACnH,MAAM,EAAEA,MAAM,EAAEL,QAAQ,EAAE,GAAGjB;gBAC7B,IAAI,CAACuB,SAAS,CAACC,KAAK,CAClB,CAAC,UAAU,EAAEpD,OAAOa,GAAG,CAACe,KAAKC,MAAM,CAACiB,WAAW,IAAI,UAAU,CAAC,EAAE9C,OAAOW,IAAI,CAACiB,KAAKC,MAAM,CAAClB,IAAI,EAAE,CAAC,EAAEuC,SAC/FL,WAAW,CAAC,OAAO,EAAEQ,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAACT,YAAY,GAAG,GAChE,EAAE,CAAC;gBAEN,MAAMY,UAAU,IAAI,CAACD,cAAc,CAACrB,GAAG,CAACF;gBAExC,KAAK,MAAMyB,eAAeD,QAAS;oBACjC,IAAI,CAAChB,cAAc,CAACiB;gBACtB;gBAEA,IAAI,CAACP,SAAS,CAACC,KAAK,CAAC,CAAC,cAAc,CAAC;YACvC;QACF;IACF;IAEAO,UAAUC,mBAAwC,EAAE;QAClD,MAAM,EAAEC,UAAU,EAAEC,iBAAiB,EAAEjB,QAAQ,EAAE,GAAGe;QACpD,MAAM,EAAEG,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGL;QAEvD,MAAMM,gBAEF;YACFF,SAAS/D,cAAK,CAACkE,WAAW;YAC1BN,QAAQ5D,cAAK,CAACmE,SAAS;YACvBL,SAAS9D,cAAK,CAACG,IAAI;YACnBiE,SAASpE,cAAK,CAACc,MAAM;YACrBkD,SAAShE,cAAK,CAACG,IAAI;YACnB0D,SAAS7D,cAAK,CAACa,GAAG;YAClBwD,QAAQrE,cAAK,CAACW,OAAO;QACvB;QAEA,IAAI,CAACqC,SAAS,CAACC,KAAK,CAACjD,cAAK,CAACsE,UAAU,CAAC,CAAC,oBAAoB,CAAC;QAE5D,IAAIZ,WAAWa,IAAI,GAAG,GAAG;YACvB,MAAMC,iBAAiBC,IAAAA,oCAAiB,EAAC;mBAAIf,WAAWgB,MAAM;aAAG;YAEjE,KAAK,MAAMC,iBAAiBH,eAAgB;gBAC1C,MAAMjC,UAAU0B,aAAa,CAACU,cAAc5B,MAAM,CAAC;gBACnD,MAAMrB,SAASiD,cAAcjD,MAAM;gBAEnC,IAAI,CAACsB,SAAS,CAACC,KAAK,CAClB5B,OACEvB,gBAAQ,CAACC,IAAI,EACbiB,iBAAiBU,OAAOiB,WAAW,IAAI,YAAYjB,OAAOlB,IAAI,GAC9D+B,QACE,GAAGoC,cAAc5B,MAAM,GAAG4B,cAAcjC,QAAQ,GAAG,CAAC,OAAO,EAAEQ,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAACwB,cAAcjC,QAAQ,IAAI,GAAG,IAAI;YAIjI;YAEA,IAAI,CAACM,SAAS,CAACC,KAAK,CAClB,CAAC,uBAAuB,EAAEc,QAAQa,MAAM,CAAC,WAAW,EAAEd,QAAQc,MAAM,CAAC,WAAW,EAAEZ,QAAQY,MAAM,CAAC,WAAW,EAAEf,QAAQe,MAAM,CAAC,EAAE,CAAC;QAEpI,OAAO;YACL,IAAI,CAAC5B,SAAS,CAACC,KAAK,CAAC;QACvB;QAEA,IAAIW,UAAUA,OAAOgB,MAAM,GAAG,GAAG;YAC/B,IAAIC,kBAAkB,CAAC,8EAA8E,CAAC;YAEtG,KAAK,MAAMC,YAAYlB,OAAQ;gBAC7B,MAAMlC,SAASgC,WAAW1B,GAAG,CAAC8C,WAAWpD;gBAEzC,IAAIA,QAAQ;oBACV,MAAM,EAAEiB,WAAW,EAAEnC,IAAI,EAAE,GAAGkB;oBAC9B,MAAMqD,WAAW,IAAI,CAACnD,UAAU,CAACI,GAAG,CAAC8C;oBAErCD,mBAAmB,CAAC,CAAC,EAAElC,YAAY,CAAC,EAAEnC,KAAK,GAAG,CAAC;oBAE/C,IAAI,CAACwC,SAAS,CAACC,KAAK,CAAC,CAAC,WAAW,EAAEjD,cAAK,CAACW,OAAO,CAACgC,aAAa,CAAC,EAAE3C,cAAK,CAACS,IAAI,CAACD,MAAM,EAAE,EAAER,cAAK,CAACmE,SAAS,CAAC,kBAAkB,EAAE,CAAC;oBAE3H,IAAIY,UAAU;wBACZ,KAAK,MAAMvD,SAASuD,SAAU;4BAC5B,kDAAkD;4BAClD,IAAI,CAAC/B,SAAS,CAACC,KAAK,CAAC,CAAC,UAAU,EAAEzB,MAAMqB,GAAG,CAAC,EAAE,CAAC;wBACjD;oBACF;gBACF;YACF;YAEAgC,mBAAmB;YACnB,IAAI,CAAC7B,SAAS,CAACC,KAAK,CAAC4B;QACvB;QAEA,IAAI,CAAC7B,SAAS,CAACC,KAAK,CAAC5B,OAAOvB,gBAAQ,CAACC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAEmD,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAACT,WAAW,YAAY,CAAC;IACvH;IAhLAsC,YAAY,AAAQ9C,OAAmD,CAAE;;QALzEc,uBAAAA,aAAAA,KAAAA;QAEA,uBAAQpB,cAAR,KAAA;QACA,uBAASyB,kBAAT,KAAA;aAEoBnB,UAAAA;aALpBc,YAAsBiC,QAAQC,MAAM;aAE5BtD,aAAa,IAAIuD;aAChB9B,iBAAiB,IAAI8B;QAG5BjD,QAAQC,QAAQ,GAAGD,QAAQC,QAAQ,IAAIrC,gBAAQ,CAACC,IAAI;IACtD;AA+KF"}
1
+ {"version":3,"sources":["../src/AdoReporter.ts"],"sourcesContent":["import { formatDuration, hrToSeconds } from \"@lage-run/format-hrtime\";\nimport { isTargetStatusLogEntry } from \"./isTargetStatusLogEntry.js\";\nimport { LogLevel } from \"@lage-run/logger\";\nimport chalk from \"chalk\";\nimport type { Reporter, LogEntry } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetStatus } from \"@lage-run/scheduler-types\";\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\nimport type { Writable } from \"stream\";\nimport { slowestTargetRuns } from \"./slowestTargetRuns.js\";\n\nconst colors = {\n [LogLevel.info]: chalk.white,\n [LogLevel.verbose]: chalk.gray,\n [LogLevel.warn]: chalk.white,\n [LogLevel.error]: chalk.white,\n [LogLevel.silly]: chalk.green,\n task: chalk.cyan,\n pkg: chalk.magenta,\n ok: chalk.green,\n error: chalk.red,\n warn: chalk.yellow,\n};\n\nconst logLevelLabel = {\n [LogLevel.info]: \"INFO\",\n [LogLevel.warn]: \"WARN\",\n [LogLevel.error]: \"ERR!\",\n [LogLevel.silly]: \"SILLY\",\n [LogLevel.verbose]: \"VERB\",\n};\n\nfunction getTaskLogPrefix(pkg: string, task: string) {\n return `${colors.pkg(pkg)} ${colors.task(task)}`;\n}\n\nfunction normalize(prefixOrMessage: string, message?: string) {\n if (typeof message === \"string\") {\n const prefix = prefixOrMessage;\n return { prefix, message };\n } else {\n const prefix = \"\";\n const message = prefixOrMessage;\n return { prefix, message };\n }\n}\n\nfunction format(level: LogLevel, prefix: string, message: string) {\n return `${logLevelLabel[level]}: ${prefix} ${message}\\n`;\n}\n\nexport class AdoReporter implements Reporter {\n logStream: Writable = process.stdout;\n\n private logEntries = new Map<string, LogEntry[]>();\n readonly groupedEntries = new Map<string, LogEntry[]>();\n\n constructor(private options: { logLevel?: LogLevel; grouped?: boolean }) {\n options.logLevel = options.logLevel || LogLevel.info;\n }\n\n log(entry: LogEntry<any>) {\n if (entry.data && entry.data.target && entry.data.target.hidden) {\n return;\n }\n\n if (entry.data && entry.data.target) {\n if (!this.logEntries.has(entry.data.target.id)) {\n this.logEntries.set(entry.data.target.id, []);\n }\n\n this.logEntries.get(entry.data.target.id)!.push(entry);\n }\n\n if (this.options.logLevel! >= entry.level) {\n if (this.options.grouped && entry.data?.target) {\n return this.logTargetEntryByGroup(entry);\n }\n\n return this.logTargetEntry(entry);\n }\n }\n\n private logTargetEntry(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const colorFn = colors[entry.level];\n const data = entry.data!;\n\n if (isTargetStatusLogEntry(data)) {\n const { target, hash, duration } = data;\n const { packageName, task } = target;\n\n const normalizedArgs = this.options.grouped\n ? normalize(entry.msg)\n : normalize(getTaskLogPrefix(packageName ?? \"<root>\", task), entry.msg);\n\n const pkgTask = this.options.grouped ? `${chalk.magenta(packageName)} ${chalk.cyan(task)}` : \"\";\n\n switch (data.status) {\n case \"running\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.ok(\"➔\")} start ${pkgTask}`)));\n\n case \"success\":\n return this.logStream.write(\n format(\n entry.level,\n normalizedArgs.prefix,\n colorFn(`${colors.ok(\"✓\")} done ${pkgTask} - ${formatDuration(hrToSeconds(duration!))}`)\n )\n );\n\n case \"failed\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.error(\"✖\")} fail ${pkgTask}`)));\n\n case \"skipped\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.ok(\"»\")} skip ${pkgTask} - ${hash!}`)));\n\n case \"aborted\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.warn(\"-\")} aborted ${pkgTask}`)));\n\n case \"queued\":\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(`${colors.warn(\"…\")} aborted ${pkgTask}`)));\n }\n } else if (entry?.data?.target) {\n const { target } = data;\n const { packageName, task } = target;\n const normalizedArgs = this.options.grouped\n ? normalize(entry.msg)\n : normalize(getTaskLogPrefix(packageName ?? \"<root>\", task), entry.msg);\n return this.logStream.write(format(entry.level, normalizedArgs.prefix, colorFn(\"| \" + normalizedArgs.message)));\n } else if (entry?.msg.trim() !== \"\") {\n return this.logStream.write(format(entry.level, \"\", entry.msg));\n }\n }\n\n private logTargetEntryByGroup(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const data = entry.data!;\n\n const target = data.target;\n const { id } = target;\n\n this.groupedEntries.set(id, this.groupedEntries.get(id) || []);\n this.groupedEntries.get(id)?.push(entry);\n\n if (isTargetStatusLogEntry(data)) {\n if (data.status === \"success\" || data.status === \"failed\" || data.status === \"skipped\" || data.status === \"aborted\") {\n const { status, duration } = data;\n this.logStream.write(\n `##[group] ${colors.pkg(data.target.packageName ?? \"<root>\")} ${colors.task(data.target.task)} ${status}${\n duration ? `, took ${formatDuration(hrToSeconds(duration))}` : \"\"\n }\\n`\n );\n const entries = this.groupedEntries.get(id)! as LogEntry<TargetStatusEntry>[];\n\n for (const targetEntry of entries) {\n this.logTargetEntry(targetEntry);\n }\n\n this.logStream.write(`##[endgroup]\\n`);\n }\n }\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, targetRunByStatus, duration } = schedulerRunSummary;\n const { failed, aborted, skipped, success, pending } = targetRunByStatus;\n\n const statusColorFn: {\n [status in TargetStatus]: chalk.Chalk;\n } = {\n success: chalk.greenBright,\n failed: chalk.redBright,\n skipped: chalk.gray,\n running: chalk.yellow,\n pending: chalk.gray,\n aborted: chalk.red,\n queued: chalk.magenta,\n };\n\n this.logStream.write(chalk.cyanBright(`##[section]Summary\\n`));\n\n if (targetRuns.size > 0) {\n const slowestTargets = slowestTargetRuns([...targetRuns.values()]);\n\n for (const wrappedTarget of slowestTargets) {\n const colorFn = statusColorFn[wrappedTarget.status];\n const target = wrappedTarget.target;\n\n this.logStream.write(\n format(\n LogLevel.info,\n getTaskLogPrefix(target.packageName || \"[GLOBAL]\", target.task),\n colorFn(\n `${wrappedTarget.status}${wrappedTarget.duration ? `, took ${formatDuration(hrToSeconds(wrappedTarget.duration))}` : \"\"}`\n )\n )\n );\n }\n\n this.logStream.write(\n `[Tasks Count] success: ${success.length}, skipped: ${skipped.length}, pending: ${pending.length}, aborted: ${aborted.length}\\n`\n );\n } else {\n this.logStream.write(\"Nothing has been run.\\n\");\n }\n\n if (failed && failed.length > 0) {\n let packagesMessage = `##vso[task.logissue type=error]Your build failed on the following packages => `;\n\n for (const targetId of failed) {\n const target = targetRuns.get(targetId)?.target;\n\n if (target) {\n const { packageName, task } = target;\n const taskLogs = this.logEntries.get(targetId);\n\n packagesMessage += `[${packageName} ${task}], `;\n\n this.logStream.write(`##[error] [${chalk.magenta(packageName)} ${chalk.cyan(task)}] ${chalk.redBright(\"ERROR DETECTED\")}\\n`);\n\n if (taskLogs) {\n for (const entry of taskLogs) {\n // Log each entry separately to prevent truncation\n this.logStream.write(`##[error] ${entry.msg}\\n`);\n }\n }\n }\n }\n\n packagesMessage += \"find the error logs above with the prefix '##[error]!'\\n\";\n this.logStream.write(packagesMessage);\n }\n\n this.logStream.write(format(LogLevel.info, \"\", `Took a total of ${formatDuration(hrToSeconds(duration))} to complete`));\n }\n}\n"],"names":["AdoReporter","colors","LogLevel","info","chalk","white","verbose","gray","warn","error","silly","green","task","cyan","pkg","magenta","ok","red","yellow","logLevelLabel","getTaskLogPrefix","normalize","prefixOrMessage","message","prefix","format","level","log","entry","data","target","hidden","logEntries","has","id","set","get","push","options","logLevel","grouped","logTargetEntryByGroup","logTargetEntry","colorFn","isTargetStatusLogEntry","hash","duration","packageName","normalizedArgs","msg","pkgTask","status","logStream","write","formatDuration","hrToSeconds","trim","groupedEntries","entries","targetEntry","summarize","schedulerRunSummary","targetRuns","targetRunByStatus","failed","aborted","skipped","success","pending","statusColorFn","greenBright","redBright","running","queued","cyanBright","size","slowestTargets","slowestTargetRuns","values","wrappedTarget","length","packagesMessage","targetId","taskLogs","process","stdout","Map"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ChromeTraceEventsReporter.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport type { Reporter } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetRun } from \"@lage-run/scheduler-types\";\nimport type { Writable } from \"stream\";\n\ninterface TraceEventsObject {\n traceEvents: CompleteEvent[];\n displayTimeUnit: \"ms\" | \"ns\";\n}\n\ninterface CompleteEvent {\n name: string;\n cat: string; // status#task\n ph: \"X\";\n ts: number; // in microseconds\n pid: number;\n tid: number;\n dur: number;\n args?: Record<string, any>;\n}\n\nexport interface ChromeTraceEventsReporterOptions {\n outputFile?: string;\n concurrency: number;\n categorize?: (targetRun?: TargetRun) => string;\n}\n\nfunction hrTimeToMicroseconds(hr: [number, number]) {\n return hr[0] * 1e6 + hr[1] * 1e-3;\n}\n\nfunction getTimeBasedFilename(prefix: string) {\n const now = new Date(); // 2011-10-05T14:48:00.000Z\n const datetime = now.toISOString().split(\".\")[0]; // 2011-10-05T14:48:00\n const datetimeNormalized = datetime.replace(/-|:/g, \"\"); // 20111005T144800\n return `${prefix ? prefix + \"-\" : \"\"}${datetimeNormalized}.json`;\n}\n\nexport class ChromeTraceEventsReporter implements Reporter {\n logStream: Writable;\n consoleLogStream: Writable = process.stdout;\n\n private events: TraceEventsObject = {\n traceEvents: [],\n displayTimeUnit: \"ms\",\n };\n private outputFile: string;\n\n constructor(private options: ChromeTraceEventsReporterOptions) {\n this.outputFile = options.outputFile ?? getTimeBasedFilename(\"profile\");\n\n if (!fs.existsSync(path.dirname(this.outputFile))) {\n fs.mkdirSync(path.dirname(this.outputFile), { recursive: true });\n }\n\n this.logStream = fs.createWriteStream(this.outputFile, { flags: \"w\" });\n }\n\n log() {\n // pass\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, startTime } = schedulerRunSummary;\n\n // categorize events\n const { categorize } = this.options;\n\n for (const targetRun of targetRuns.values()) {\n // Skip hidden targets because those should be hidden by reporters.\n // Hiding as well skipped targets to avoid polluting the profile.\n if (targetRun.target.hidden || targetRun.status === \"skipped\") {\n continue;\n }\n\n const event = {\n name: targetRun.target.id,\n cat: `${targetRun.status}#${targetRun.target.task}`,\n ph: \"X\",\n ts: hrTimeToMicroseconds(targetRun.startTime) - hrTimeToMicroseconds(startTime), // in microseconds\n dur: hrTimeToMicroseconds(targetRun.duration ?? [0, 1000]), // in microseconds\n pid: 1,\n tid: targetRun.threadId,\n } as CompleteEvent;\n\n if (categorize) {\n event.cat += `,${categorize(targetRun)}`;\n }\n\n this.events.traceEvents.push(event);\n }\n\n // write events to stream\n this.logStream.write(JSON.stringify(this.events, null, 2));\n\n this.consoleLogStream.write(\n chalk.blueBright(\n `\\nProfiler output written to ${chalk.underline(this.outputFile)}, open it with chrome://tracing or edge://tracing\\n`\n )\n );\n }\n}\n"],"names":["ChromeTraceEventsReporter","hrTimeToMicroseconds","hr","getTimeBasedFilename","prefix","now","Date","datetime","toISOString","split","datetimeNormalized","replace","log","summarize","schedulerRunSummary","targetRuns","startTime","categorize","options","targetRun","values","target","hidden","status","event","name","id","cat","task","ph","ts","dur","duration","pid","tid","threadId","events","traceEvents","push","logStream","write","JSON","stringify","consoleLogStream","chalk","blueBright","underline","outputFile","constructor","process","stdout","displayTimeUnit","fs","existsSync","path","dirname","mkdirSync","recursive","createWriteStream","flags"],"mappings":";;;;+BAwCaA;;;eAAAA;;;8DAxCK;2DACH;6DACE;;;;;;;;;;;;;;;;;;;AA2BjB,SAASC,qBAAqBC,EAAoB;IAChD,OAAOA,EAAE,CAAC,EAAE,GAAG,MAAMA,EAAE,CAAC,EAAE,GAAG;AAC/B;AAEA,SAASC,qBAAqBC,MAAc;IAC1C,MAAMC,MAAM,IAAIC,QAAQ,2BAA2B;IACnD,MAAMC,WAAWF,IAAIG,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB;IACxE,MAAMC,qBAAqBH,SAASI,OAAO,CAAC,QAAQ,KAAK,kBAAkB;IAC3E,OAAO,GAAGP,SAASA,SAAS,MAAM,KAAKM,mBAAmB,KAAK,CAAC;AAClE;AAEO,MAAMV;IAoBXY,MAAM;IACJ,OAAO;IACT;IAEAC,UAAUC,mBAAwC,EAAE;QAClD,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGF;QAElC,oBAAoB;QACpB,MAAM,EAAEG,UAAU,EAAE,GAAG,IAAI,CAACC,OAAO;QAEnC,KAAK,MAAMC,aAAaJ,WAAWK,MAAM,GAAI;YAC3C,mEAAmE;YACnE,iEAAiE;YACjE,IAAID,UAAUE,MAAM,CAACC,MAAM,IAAIH,UAAUI,MAAM,KAAK,WAAW;gBAC7D;YACF;YAEA,MAAMC,QAAQ;gBACZC,MAAMN,UAAUE,MAAM,CAACK,EAAE;gBACzBC,KAAK,GAAGR,UAAUI,MAAM,CAAC,CAAC,EAAEJ,UAAUE,MAAM,CAACO,IAAI,EAAE;gBACnDC,IAAI;gBACJC,IAAI7B,qBAAqBkB,UAAUH,SAAS,IAAIf,qBAAqBe;gBACrEe,KAAK9B,qBAAqBkB,UAAUa,QAAQ,IAAI;oBAAC;oBAAG;iBAAK;gBACzDC,KAAK;gBACLC,KAAKf,UAAUgB,QAAQ;YACzB;YAEA,IAAIlB,YAAY;gBACdO,MAAMG,GAAG,IAAI,CAAC,CAAC,EAAEV,WAAWE,YAAY;YAC1C;YAEA,IAAI,CAACiB,MAAM,CAACC,WAAW,CAACC,IAAI,CAACd;QAC/B;QAEA,yBAAyB;QACzB,IAAI,CAACe,SAAS,CAACC,KAAK,CAACC,KAAKC,SAAS,CAAC,IAAI,CAACN,MAAM,EAAE,MAAM;QAEvD,IAAI,CAACO,gBAAgB,CAACH,KAAK,CACzBI,cAAK,CAACC,UAAU,CACd,CAAC,6BAA6B,EAAED,cAAK,CAACE,SAAS,CAAC,IAAI,CAACC,UAAU,EAAE,mDAAmD,CAAC;IAG3H;IApDAC,YAAY,AAAQ9B,OAAyC,CAAE;;QAT/DqB,uBAAAA,aAAAA,KAAAA;QACAI,uBAAAA,oBAAAA,KAAAA;QAEA,uBAAQP,UAAR,KAAA;QAIA,uBAAQW,cAAR,KAAA;aAEoB7B,UAAAA;aARpByB,mBAA6BM,QAAQC,MAAM;aAEnCd,SAA4B;YAClCC,aAAa,EAAE;YACfc,iBAAiB;QACnB;QAIE,IAAI,CAACJ,UAAU,GAAG7B,QAAQ6B,UAAU,IAAI5C,qBAAqB;QAE7D,IAAI,CAACiD,WAAE,CAACC,UAAU,CAACC,aAAI,CAACC,OAAO,CAAC,IAAI,CAACR,UAAU,IAAI;YACjDK,WAAE,CAACI,SAAS,CAACF,aAAI,CAACC,OAAO,CAAC,IAAI,CAACR,UAAU,GAAG;gBAAEU,WAAW;YAAK;QAChE;QAEA,IAAI,CAAClB,SAAS,GAAGa,WAAE,CAACM,iBAAiB,CAAC,IAAI,CAACX,UAAU,EAAE;YAAEY,OAAO;QAAI;IACtE;AA6CF"}
1
+ {"version":3,"sources":["../src/ChromeTraceEventsReporter.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport type { Reporter } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetRun } from \"@lage-run/scheduler-types\";\nimport type { Writable } from \"stream\";\n\ninterface TraceEventsObject {\n traceEvents: CompleteEvent[];\n displayTimeUnit: \"ms\" | \"ns\";\n}\n\ninterface CompleteEvent {\n name: string;\n cat: string; // status#task\n ph: \"X\";\n ts: number; // in microseconds\n pid: number;\n tid: number;\n dur: number;\n args?: Record<string, any>;\n}\n\nexport interface ChromeTraceEventsReporterOptions {\n outputFile?: string;\n concurrency: number;\n categorize?: (targetRun?: TargetRun) => string;\n}\n\nfunction hrTimeToMicroseconds(hr: [number, number]) {\n return hr[0] * 1e6 + hr[1] * 1e-3;\n}\n\nfunction getTimeBasedFilename(prefix: string) {\n const now = new Date(); // 2011-10-05T14:48:00.000Z\n const datetime = now.toISOString().split(\".\")[0]; // 2011-10-05T14:48:00\n const datetimeNormalized = datetime.replace(/-|:/g, \"\"); // 20111005T144800\n return `${prefix ? prefix + \"-\" : \"\"}${datetimeNormalized}.json`;\n}\n\nexport class ChromeTraceEventsReporter implements Reporter {\n logStream: Writable;\n consoleLogStream: Writable = process.stdout;\n\n private events: TraceEventsObject = {\n traceEvents: [],\n displayTimeUnit: \"ms\",\n };\n private outputFile: string;\n\n constructor(private options: ChromeTraceEventsReporterOptions) {\n this.outputFile = options.outputFile ?? getTimeBasedFilename(\"profile\");\n\n if (!fs.existsSync(path.dirname(this.outputFile))) {\n fs.mkdirSync(path.dirname(this.outputFile), { recursive: true });\n }\n\n this.logStream = fs.createWriteStream(this.outputFile, { flags: \"w\" });\n }\n\n log() {\n // pass\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, startTime } = schedulerRunSummary;\n\n // categorize events\n const { categorize } = this.options;\n\n for (const targetRun of targetRuns.values()) {\n // Skip hidden targets because those should be hidden by reporters.\n // Hiding as well skipped targets to avoid polluting the profile.\n if (targetRun.target.hidden || targetRun.status === \"skipped\") {\n continue;\n }\n\n const event = {\n name: targetRun.target.id,\n cat: `${targetRun.status}#${targetRun.target.task}`,\n ph: \"X\",\n ts: hrTimeToMicroseconds(targetRun.startTime) - hrTimeToMicroseconds(startTime), // in microseconds\n dur: hrTimeToMicroseconds(targetRun.duration ?? [0, 1000]), // in microseconds\n pid: 1,\n tid: targetRun.threadId,\n } as CompleteEvent;\n\n if (categorize) {\n event.cat += `,${categorize(targetRun)}`;\n }\n\n this.events.traceEvents.push(event);\n }\n\n // write events to stream\n this.logStream.write(JSON.stringify(this.events, null, 2));\n\n this.consoleLogStream.write(\n chalk.blueBright(\n `\\nProfiler output written to ${chalk.underline(this.outputFile)}, open it with chrome://tracing or edge://tracing\\n`\n )\n );\n }\n}\n"],"names":["ChromeTraceEventsReporter","hrTimeToMicroseconds","hr","getTimeBasedFilename","prefix","now","Date","datetime","toISOString","split","datetimeNormalized","replace","log","summarize","schedulerRunSummary","targetRuns","startTime","categorize","options","targetRun","values","target","hidden","status","event","name","id","cat","task","ph","ts","dur","duration","pid","tid","threadId","events","traceEvents","push","logStream","write","JSON","stringify","consoleLogStream","chalk","blueBright","underline","outputFile","process","stdout","displayTimeUnit","fs","existsSync","path","dirname","mkdirSync","recursive","createWriteStream","flags"],"mappings":";;;;+BAwCaA;;;eAAAA;;;8DAxCK;2DACH;6DACE;;;;;;;;;;;;;;;;;;;AA2BjB,SAASC,qBAAqBC,EAAoB;IAChD,OAAOA,EAAE,CAAC,EAAE,GAAG,MAAMA,EAAE,CAAC,EAAE,GAAG;AAC/B;AAEA,SAASC,qBAAqBC,MAAc;IAC1C,MAAMC,MAAM,IAAIC,QAAQ,2BAA2B;IACnD,MAAMC,WAAWF,IAAIG,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,sBAAsB;IACxE,MAAMC,qBAAqBH,SAASI,OAAO,CAAC,QAAQ,KAAK,kBAAkB;IAC3E,OAAO,GAAGP,SAASA,SAAS,MAAM,KAAKM,mBAAmB,KAAK,CAAC;AAClE;AAEO,MAAMV;IAoBXY,MAAM;IACJ,OAAO;IACT;IAEAC,UAAUC,mBAAwC,EAAE;QAClD,MAAM,EAAEC,UAAU,EAAEC,SAAS,EAAE,GAAGF;QAElC,oBAAoB;QACpB,MAAM,EAAEG,UAAU,EAAE,GAAG,IAAI,CAACC,OAAO;QAEnC,KAAK,MAAMC,aAAaJ,WAAWK,MAAM,GAAI;YAC3C,mEAAmE;YACnE,iEAAiE;YACjE,IAAID,UAAUE,MAAM,CAACC,MAAM,IAAIH,UAAUI,MAAM,KAAK,WAAW;gBAC7D;YACF;YAEA,MAAMC,QAAQ;gBACZC,MAAMN,UAAUE,MAAM,CAACK,EAAE;gBACzBC,KAAK,GAAGR,UAAUI,MAAM,CAAC,CAAC,EAAEJ,UAAUE,MAAM,CAACO,IAAI,EAAE;gBACnDC,IAAI;gBACJC,IAAI7B,qBAAqBkB,UAAUH,SAAS,IAAIf,qBAAqBe;gBACrEe,KAAK9B,qBAAqBkB,UAAUa,QAAQ,IAAI;oBAAC;oBAAG;iBAAK;gBACzDC,KAAK;gBACLC,KAAKf,UAAUgB,QAAQ;YACzB;YAEA,IAAIlB,YAAY;gBACdO,MAAMG,GAAG,IAAI,CAAC,CAAC,EAAEV,WAAWE,YAAY;YAC1C;YAEA,IAAI,CAACiB,MAAM,CAACC,WAAW,CAACC,IAAI,CAACd;QAC/B;QAEA,yBAAyB;QACzB,IAAI,CAACe,SAAS,CAACC,KAAK,CAACC,KAAKC,SAAS,CAAC,IAAI,CAACN,MAAM,EAAE,MAAM;QAEvD,IAAI,CAACO,gBAAgB,CAACH,KAAK,CACzBI,cAAK,CAACC,UAAU,CACd,CAAC,6BAA6B,EAAED,cAAK,CAACE,SAAS,CAAC,IAAI,CAACC,UAAU,EAAE,mDAAmD,CAAC;IAG3H;IApDA,YAAY,AAAQ7B,OAAyC,CAAE;;QAT/DqB,uBAAAA,aAAAA,KAAAA;QACAI,uBAAAA,oBAAAA,KAAAA;QAEA,uBAAQP,UAAR,KAAA;QAIA,uBAAQW,cAAR,KAAA;aAEoB7B,UAAAA;aARpByB,mBAA6BK,QAAQC,MAAM;aAEnCb,SAA4B;YAClCC,aAAa,EAAE;YACfa,iBAAiB;QACnB;QAIE,IAAI,CAACH,UAAU,GAAG7B,QAAQ6B,UAAU,IAAI5C,qBAAqB;QAE7D,IAAI,CAACgD,WAAE,CAACC,UAAU,CAACC,aAAI,CAACC,OAAO,CAAC,IAAI,CAACP,UAAU,IAAI;YACjDI,WAAE,CAACI,SAAS,CAACF,aAAI,CAACC,OAAO,CAAC,IAAI,CAACP,UAAU,GAAG;gBAAES,WAAW;YAAK;QAChE;QAEA,IAAI,CAACjB,SAAS,GAAGY,WAAE,CAACM,iBAAiB,CAAC,IAAI,CAACV,UAAU,EAAE;YAAEW,OAAO;QAAI;IACtE;AA6CF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/JsonReporter.ts"],"sourcesContent":["/* eslint-disable no-console */\n\nimport { hrToSeconds } from \"@lage-run/format-hrtime\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { LogLevel } from \"@lage-run/logger\";\nimport { type LogEntry, type Reporter } from \"@lage-run/logger\";\n\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\n\nexport class JsonReporter implements Reporter {\n constructor(private options: { logLevel: LogLevel; indented: boolean }) {}\n\n log(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n if (entry.data && entry.data.target && entry.data.target.hidden) {\n return;\n }\n\n if (this.options.logLevel >= entry.level) {\n console.log(this.options.indented ? JSON.stringify(entry, null, 2) : JSON.stringify(entry));\n }\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { duration, targetRuns, targetRunByStatus } = schedulerRunSummary;\n const summary: any = {};\n const taskStats: any[] = [];\n\n for (const targetRun of targetRuns.values()) {\n taskStats.push({\n package: targetRun.target.packageName,\n task: targetRun.target.task,\n duration: hrToSeconds(targetRun.duration),\n status: targetRun.status,\n });\n }\n\n for (const status of Object.keys(targetRunByStatus)) {\n if (targetRunByStatus[status] && targetRunByStatus[status].length.length > 0) {\n summary[`${status}Targets`] = targetRunByStatus[status].length;\n }\n }\n\n summary.duration = hrToSeconds(duration);\n summary.taskStats = taskStats;\n\n console.log(JSON.stringify({ summary }));\n }\n}\n"],"names":["JsonReporter","log","entry","data","target","hidden","options","logLevel","level","console","indented","JSON","stringify","summarize","schedulerRunSummary","duration","targetRuns","targetRunByStatus","summary","taskStats","targetRun","values","push","package","packageName","task","hrToSeconds","status","Object","keys","length","constructor"],"mappings":"AAAA,6BAA6B;;;;+BAShBA;;;eAAAA;;;8BAPe;;;;;;;;;;;;;;AAOrB,MAAMA;IAGXC,IAAIC,KAAuD,EAAE;QAC3D,IAAIA,MAAMC,IAAI,IAAID,MAAMC,IAAI,CAACC,MAAM,IAAIF,MAAMC,IAAI,CAACC,MAAM,CAACC,MAAM,EAAE;YAC/D;QACF;QAEA,IAAI,IAAI,CAACC,OAAO,CAACC,QAAQ,IAAIL,MAAMM,KAAK,EAAE;YACxCC,QAAQR,GAAG,CAAC,IAAI,CAACK,OAAO,CAACI,QAAQ,GAAGC,KAAKC,SAAS,CAACV,OAAO,MAAM,KAAKS,KAAKC,SAAS,CAACV;QACtF;IACF;IAEAW,UAAUC,mBAAwC,EAAE;QAClD,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,iBAAiB,EAAE,GAAGH;QACpD,MAAMI,UAAe,CAAC;QACtB,MAAMC,YAAmB,EAAE;QAE3B,KAAK,MAAMC,aAAaJ,WAAWK,MAAM,GAAI;YAC3CF,UAAUG,IAAI,CAAC;gBACbC,SAASH,UAAUhB,MAAM,CAACoB,WAAW;gBACrCC,MAAML,UAAUhB,MAAM,CAACqB,IAAI;gBAC3BV,UAAUW,IAAAA,yBAAW,EAACN,UAAUL,QAAQ;gBACxCY,QAAQP,UAAUO,MAAM;YAC1B;QACF;QAEA,KAAK,MAAMA,UAAUC,OAAOC,IAAI,CAACZ,mBAAoB;YACnD,IAAIA,iBAAiB,CAACU,OAAO,IAAIV,iBAAiB,CAACU,OAAO,CAACG,MAAM,CAACA,MAAM,GAAG,GAAG;gBAC5EZ,OAAO,CAAC,GAAGS,OAAO,OAAO,CAAC,CAAC,GAAGV,iBAAiB,CAACU,OAAO,CAACG,MAAM;YAChE;QACF;QAEAZ,QAAQH,QAAQ,GAAGW,IAAAA,yBAAW,EAACX;QAC/BG,QAAQC,SAAS,GAAGA;QAEpBV,QAAQR,GAAG,CAACU,KAAKC,SAAS,CAAC;YAAEM;QAAQ;IACvC;IApCAa,YAAY,AAAQzB,OAAkD,CAAE;;aAApDA,UAAAA;IAAqD;AAqC3E"}
1
+ {"version":3,"sources":["../src/JsonReporter.ts"],"sourcesContent":["/* eslint-disable no-console */\n\nimport { hrToSeconds } from \"@lage-run/format-hrtime\";\nimport type { SchedulerRunSummary } from \"@lage-run/scheduler-types\";\nimport type { LogLevel } from \"@lage-run/logger\";\nimport { type LogEntry, type Reporter } from \"@lage-run/logger\";\n\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\n\nexport class JsonReporter implements Reporter {\n constructor(private options: { logLevel: LogLevel; indented: boolean }) {}\n\n log(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n if (entry.data && entry.data.target && entry.data.target.hidden) {\n return;\n }\n\n if (this.options.logLevel >= entry.level) {\n console.log(this.options.indented ? JSON.stringify(entry, null, 2) : JSON.stringify(entry));\n }\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { duration, targetRuns, targetRunByStatus } = schedulerRunSummary;\n const summary: any = {};\n const taskStats: any[] = [];\n\n for (const targetRun of targetRuns.values()) {\n taskStats.push({\n package: targetRun.target.packageName,\n task: targetRun.target.task,\n duration: hrToSeconds(targetRun.duration),\n status: targetRun.status,\n });\n }\n\n for (const status of Object.keys(targetRunByStatus)) {\n if (targetRunByStatus[status] && targetRunByStatus[status].length.length > 0) {\n summary[`${status}Targets`] = targetRunByStatus[status].length;\n }\n }\n\n summary.duration = hrToSeconds(duration);\n summary.taskStats = taskStats;\n\n console.log(JSON.stringify({ summary }));\n }\n}\n"],"names":["JsonReporter","log","entry","data","target","hidden","options","logLevel","level","console","indented","JSON","stringify","summarize","schedulerRunSummary","duration","targetRuns","targetRunByStatus","summary","taskStats","targetRun","values","push","package","packageName","task","hrToSeconds","status","Object","keys","length"],"mappings":"AAAA,6BAA6B;;;;+BAShBA;;;eAAAA;;;8BAPe;;;;;;;;;;;;;;AAOrB,MAAMA;IAGXC,IAAIC,KAAuD,EAAE;QAC3D,IAAIA,MAAMC,IAAI,IAAID,MAAMC,IAAI,CAACC,MAAM,IAAIF,MAAMC,IAAI,CAACC,MAAM,CAACC,MAAM,EAAE;YAC/D;QACF;QAEA,IAAI,IAAI,CAACC,OAAO,CAACC,QAAQ,IAAIL,MAAMM,KAAK,EAAE;YACxCC,QAAQR,GAAG,CAAC,IAAI,CAACK,OAAO,CAACI,QAAQ,GAAGC,KAAKC,SAAS,CAACV,OAAO,MAAM,KAAKS,KAAKC,SAAS,CAACV;QACtF;IACF;IAEAW,UAAUC,mBAAwC,EAAE;QAClD,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAEC,iBAAiB,EAAE,GAAGH;QACpD,MAAMI,UAAe,CAAC;QACtB,MAAMC,YAAmB,EAAE;QAE3B,KAAK,MAAMC,aAAaJ,WAAWK,MAAM,GAAI;YAC3CF,UAAUG,IAAI,CAAC;gBACbC,SAASH,UAAUhB,MAAM,CAACoB,WAAW;gBACrCC,MAAML,UAAUhB,MAAM,CAACqB,IAAI;gBAC3BV,UAAUW,IAAAA,yBAAW,EAACN,UAAUL,QAAQ;gBACxCY,QAAQP,UAAUO,MAAM;YAC1B;QACF;QAEA,KAAK,MAAMA,UAAUC,OAAOC,IAAI,CAACZ,mBAAoB;YACnD,IAAIA,iBAAiB,CAACU,OAAO,IAAIV,iBAAiB,CAACU,OAAO,CAACG,MAAM,CAACA,MAAM,GAAG,GAAG;gBAC5EZ,OAAO,CAAC,GAAGS,OAAO,OAAO,CAAC,CAAC,GAAGV,iBAAiB,CAACU,OAAO,CAACG,MAAM;YAChE;QACF;QAEAZ,QAAQH,QAAQ,GAAGW,IAAAA,yBAAW,EAACX;QAC/BG,QAAQC,SAAS,GAAGA;QAEpBV,QAAQR,GAAG,CAACU,KAAKC,SAAS,CAAC;YAAEM;QAAQ;IACvC;IApCA,YAAY,AAAQZ,OAAkD,CAAE;;aAApDA,UAAAA;IAAqD;AAqC3E"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LogReporter.ts"],"sourcesContent":["import { formatDuration, hrtimeDiff, hrToSeconds } from \"@lage-run/format-hrtime\";\nimport { isTargetStatusLogEntry } from \"./isTargetStatusLogEntry.js\";\nimport { LogLevel } from \"@lage-run/logger\";\nimport ansiRegex from \"ansi-regex\";\nimport chalk from \"chalk\";\nimport type { Chalk } from \"chalk\";\nimport gradient from \"gradient-string\";\nimport type { Reporter, LogEntry } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetStatus } from \"@lage-run/scheduler-types\";\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\nimport type { Writable } from \"stream\";\nimport crypto from \"crypto\";\nimport { formatBytes } from \"./formatBytes.js\";\nimport { slowestTargetRuns } from \"./slowestTargetRuns.js\";\n\nconst colors = {\n [LogLevel.info]: chalk.white,\n [LogLevel.verbose]: chalk.gray,\n [LogLevel.warn]: chalk.white,\n [LogLevel.error]: chalk.hex(\"#FF1010\"),\n [LogLevel.silly]: chalk.green,\n task: chalk.hex(\"#00DDDD\"),\n pkg: chalk.hex(\"#FFD66B\"),\n ok: chalk.green,\n error: chalk.red,\n warn: chalk.yellow,\n};\n\n// Monokai color scheme\nconst pkgColors: Chalk[] = [\n chalk.hex(\"#e5b567\"),\n chalk.hex(\"#b4d273\"),\n chalk.hex(\"#e87d3e\"),\n chalk.hex(\"#9e86c8\"),\n chalk.hex(\"#b05279\"),\n chalk.hex(\"#6c99bb\"),\n];\n\nfunction hashStringToNumber(str: string): number {\n const hash = crypto.createHash(\"md5\");\n hash.update(str);\n const hex = hash.digest(\"hex\").substring(0, 6);\n return parseInt(hex, 16);\n}\n\nconst pkgNameToIndexInPkgColorArray = new Map<string, number>();\n\nfunction getColorForPkg(pkg: string): Chalk {\n if (!pkgNameToIndexInPkgColorArray.has(pkg)) {\n const index = hashStringToNumber(pkg) % pkgColors.length;\n pkgNameToIndexInPkgColorArray.set(pkg, index);\n }\n\n return pkgColors[pkgNameToIndexInPkgColorArray.get(pkg)!];\n}\n\nconst stripAnsiRegex = ansiRegex();\n\nfunction getTaskLogPrefix(pkg: string, task: string) {\n const pkgColor = getColorForPkg(pkg);\n return `${pkgColor(pkg)} ${colors.task(task)}`;\n}\n\nfunction stripAnsi(message: string) {\n return message.replace(stripAnsiRegex, \"\");\n}\n\nfunction normalize(prefixOrMessage: string, message?: string) {\n if (typeof message === \"string\") {\n const prefix = prefixOrMessage;\n return { prefix, message };\n } else {\n const prefix = \"\";\n const message = prefixOrMessage;\n return { prefix, message };\n }\n}\n\nexport class LogReporter implements Reporter {\n logStream: Writable = process.stdout;\n private logEntries = new Map<string, LogEntry[]>();\n readonly groupedEntries = new Map<string, LogEntry[]>();\n\n constructor(private options: { logLevel?: LogLevel; grouped?: boolean }) {\n options.logLevel = options.logLevel || LogLevel.info;\n }\n\n log(entry: LogEntry<any>) {\n // if \"hidden\", do not even attempt to record or report the entry\n if (entry?.data?.target?.hidden) {\n return;\n }\n\n // save the logs for errors\n if (entry.data?.target?.id) {\n if (!this.logEntries.has(entry.data.target.id)) {\n this.logEntries.set(entry.data.target.id, []);\n }\n this.logEntries.get(entry.data.target.id)!.push(entry);\n }\n\n // if loglevel is not high enough, do not report the entry\n if (this.options.logLevel! < entry.level) {\n return;\n }\n\n // log to grouped entries\n if (this.options.grouped && entry.data?.target) {\n return this.logTargetEntryByGroup(entry);\n }\n\n // log normal target entries\n if (entry.data && entry.data.target) {\n return this.logTargetEntry(entry);\n }\n\n // log generic entries (not related to target)\n if (entry.msg) {\n return this.print(entry.msg);\n }\n }\n\n private printEntry(entry: LogEntry<any>, message: string) {\n let prefix = \"\";\n let msg = message;\n\n if (entry?.data?.target) {\n const { packageName, task } = entry.data.target;\n const normalizedArgs = normalize(getTaskLogPrefix(packageName ?? \"<root>\", task), msg);\n prefix = normalizedArgs.prefix;\n msg = normalizedArgs.message;\n }\n\n this.print(`${prefix ? prefix + \" \" : \"\"}${msg}`);\n }\n\n private print(message: string) {\n this.logStream.write(message + \"\\n\");\n }\n\n private logTargetEntry(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const colorFn = colors[entry.level];\n const data = entry.data!;\n\n if (isTargetStatusLogEntry(data)) {\n const { hash, duration } = data;\n switch (data.status) {\n case \"running\":\n return this.printEntry(entry, colorFn(`${colors.ok(\"➔\")} start`));\n\n case \"success\":\n return this.printEntry(entry, colorFn(`${colors.ok(\"✓\")} done - ${formatDuration(hrToSeconds(duration!))}`));\n\n case \"failed\":\n return this.printEntry(entry, colorFn(`${colors.error(\"✖\")} fail`));\n\n case \"skipped\":\n return this.printEntry(entry, colorFn(`${colors.ok(\"»\")} skip - ${hash!}`));\n\n case \"aborted\":\n return this.printEntry(entry, colorFn(`${colors.warn(\"-\")} aborted`));\n\n case \"queued\":\n return this.printEntry(entry, colorFn(`${colors.warn(\"…\")} queued`));\n }\n } else {\n return this.printEntry(entry, colorFn(\": \" + stripAnsi(entry.msg)));\n }\n }\n\n private logTargetEntryByGroup(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const data = entry.data!;\n\n const target = data.target;\n const { id } = target;\n\n if (\n isTargetStatusLogEntry(data) &&\n (data.status === \"success\" || data.status === \"failed\" || data.status === \"skipped\" || data.status === \"aborted\")\n ) {\n const entries = this.logEntries.get(id)! as LogEntry<TargetStatusEntry>[];\n\n for (const targetEntry of entries) {\n this.logTargetEntry(targetEntry);\n }\n\n if (entries.length > 2) {\n this.hr();\n }\n }\n }\n\n hr() {\n this.print(\"┈\".repeat(80));\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, targetRunByStatus, duration } = schedulerRunSummary;\n const { failed, aborted, skipped, success, pending } = targetRunByStatus;\n\n const statusColorFn: {\n [status in TargetStatus]: chalk.Chalk;\n } = {\n success: chalk.greenBright,\n failed: chalk.redBright,\n skipped: chalk.gray,\n running: chalk.yellow,\n pending: chalk.gray,\n aborted: chalk.red,\n queued: chalk.magenta,\n };\n\n if (targetRuns.size > 0) {\n this.print(chalk.cyanBright(`\\nSummary`));\n\n this.hr();\n\n const slowestTargets = slowestTargetRuns([...targetRuns.values()]);\n\n for (const wrappedTarget of slowestTargets) {\n if (wrappedTarget.target.hidden) {\n continue;\n }\n\n const colorFn = statusColorFn[wrappedTarget.status] ?? chalk.white;\n const target = wrappedTarget.target;\n const hasDurations = !!wrappedTarget.duration && !!wrappedTarget.queueTime;\n const queueDuration: [number, number] = hasDurations ? hrtimeDiff(wrappedTarget.queueTime, wrappedTarget.startTime) : [0, 0];\n\n this.print(\n `${getTaskLogPrefix(target.packageName || \"<root>\", target.task)} ${colorFn(\n `${wrappedTarget.status === \"running\" ? \"running - incomplete\" : wrappedTarget.status}${\n hasDurations\n ? `, took ${formatDuration(hrToSeconds(wrappedTarget.duration))}, queued for ${formatDuration(hrToSeconds(queueDuration))}`\n : \"\"\n }`\n )}`\n );\n }\n\n this.print(\n `success: ${success.length}, skipped: ${skipped.length}, pending: ${pending.length}, aborted: ${aborted.length}, failed: ${failed.length}`\n );\n\n this.print(\n `worker restarts: ${schedulerRunSummary.workerRestarts}, max worker memory usage: ${formatBytes(\n schedulerRunSummary.maxWorkerMemoryUsage\n )}`\n );\n } else {\n this.print(\"Nothing has been run.\");\n }\n\n this.hr();\n\n if (failed && failed.length > 0) {\n for (const targetId of failed) {\n const target = targetRuns.get(targetId)?.target;\n\n if (target) {\n const { packageName, task } = target;\n const failureLogs = this.logEntries.get(targetId);\n\n this.print(`[${colors.pkg(packageName ?? \"<root>\")} ${colors.task(task)}] ${colors[LogLevel.error](\"ERROR DETECTED\")}`);\n\n if (failureLogs) {\n for (const entry of failureLogs) {\n // Log each entry separately to prevent truncation\n this.print(entry.msg);\n }\n }\n\n this.hr();\n }\n }\n }\n\n const allCacheHits = [...targetRuns.values()].filter((run) => !run.target.hidden).length === skipped.length;\n const allCacheHitText = allCacheHits ? gradient({ r: 237, g: 178, b: 77 }, \"cyan\")(`All targets skipped!`) : \"\";\n\n this.print(`Took a total of ${formatDuration(hrToSeconds(duration))} to complete. ${allCacheHitText}`);\n }\n\n resetLogEntries() {\n this.logEntries.clear();\n }\n}\n"],"names":["LogReporter","colors","LogLevel","info","chalk","white","verbose","gray","warn","error","hex","silly","green","task","pkg","ok","red","yellow","pkgColors","hashStringToNumber","str","hash","crypto","createHash","update","digest","substring","parseInt","pkgNameToIndexInPkgColorArray","Map","getColorForPkg","has","index","length","set","get","stripAnsiRegex","ansiRegex","getTaskLogPrefix","pkgColor","stripAnsi","message","replace","normalize","prefixOrMessage","prefix","log","entry","data","target","hidden","id","logEntries","push","options","logLevel","level","grouped","logTargetEntryByGroup","logTargetEntry","msg","print","printEntry","packageName","normalizedArgs","logStream","write","colorFn","isTargetStatusLogEntry","duration","status","formatDuration","hrToSeconds","entries","targetEntry","hr","repeat","summarize","schedulerRunSummary","targetRuns","targetRunByStatus","failed","aborted","skipped","success","pending","statusColorFn","greenBright","redBright","running","queued","magenta","size","cyanBright","slowestTargets","slowestTargetRuns","values","wrappedTarget","hasDurations","queueTime","queueDuration","hrtimeDiff","startTime","workerRestarts","formatBytes","maxWorkerMemoryUsage","targetId","failureLogs","allCacheHits","filter","run","allCacheHitText","gradient","r","g","b","resetLogEntries","clear","constructor","groupedEntries","process","stdout"],"mappings":";;;;+BA8EaA;;;eAAAA;;;8BA9E2C;wCACjB;wBACd;kEACH;8DACJ;uEAEG;+DAKF;6BACS;mCACM;;;;;;;;;;;;;;;;;;;AAElC,MAAMC,SAAS;IACb,CAACC,gBAAQ,CAACC,IAAI,CAAC,EAAEC,cAAK,CAACC,KAAK;IAC5B,CAACH,gBAAQ,CAACI,OAAO,CAAC,EAAEF,cAAK,CAACG,IAAI;IAC9B,CAACL,gBAAQ,CAACM,IAAI,CAAC,EAAEJ,cAAK,CAACC,KAAK;IAC5B,CAACH,gBAAQ,CAACO,KAAK,CAAC,EAAEL,cAAK,CAACM,GAAG,CAAC;IAC5B,CAACR,gBAAQ,CAACS,KAAK,CAAC,EAAEP,cAAK,CAACQ,KAAK;IAC7BC,MAAMT,cAAK,CAACM,GAAG,CAAC;IAChBI,KAAKV,cAAK,CAACM,GAAG,CAAC;IACfK,IAAIX,cAAK,CAACQ,KAAK;IACfH,OAAOL,cAAK,CAACY,GAAG;IAChBR,MAAMJ,cAAK,CAACa,MAAM;AACpB;AAEA,uBAAuB;AACvB,MAAMC,YAAqB;IACzBd,cAAK,CAACM,GAAG,CAAC;IACVN,cAAK,CAACM,GAAG,CAAC;IACVN,cAAK,CAACM,GAAG,CAAC;IACVN,cAAK,CAACM,GAAG,CAAC;IACVN,cAAK,CAACM,GAAG,CAAC;IACVN,cAAK,CAACM,GAAG,CAAC;CACX;AAED,SAASS,mBAAmBC,GAAW;IACrC,MAAMC,OAAOC,eAAM,CAACC,UAAU,CAAC;IAC/BF,KAAKG,MAAM,CAACJ;IACZ,MAAMV,MAAMW,KAAKI,MAAM,CAAC,OAAOC,SAAS,CAAC,GAAG;IAC5C,OAAOC,SAASjB,KAAK;AACvB;AAEA,MAAMkB,gCAAgC,IAAIC;AAE1C,SAASC,eAAehB,GAAW;IACjC,IAAI,CAACc,8BAA8BG,GAAG,CAACjB,MAAM;QAC3C,MAAMkB,QAAQb,mBAAmBL,OAAOI,UAAUe,MAAM;QACxDL,8BAA8BM,GAAG,CAACpB,KAAKkB;IACzC;IAEA,OAAOd,SAAS,CAACU,8BAA8BO,GAAG,CAACrB,KAAM;AAC3D;AAEA,MAAMsB,iBAAiBC,IAAAA,kBAAS;AAEhC,SAASC,iBAAiBxB,GAAW,EAAED,IAAY;IACjD,MAAM0B,WAAWT,eAAehB;IAChC,OAAO,GAAGyB,SAASzB,KAAK,CAAC,EAAEb,OAAOY,IAAI,CAACA,OAAO;AAChD;AAEA,SAAS2B,UAAUC,OAAe;IAChC,OAAOA,QAAQC,OAAO,CAACN,gBAAgB;AACzC;AAEA,SAASO,UAAUC,eAAuB,EAAEH,OAAgB;IAC1D,IAAI,OAAOA,YAAY,UAAU;QAC/B,MAAMI,SAASD;QACf,OAAO;YAAEC;YAAQJ;QAAQ;IAC3B,OAAO;QACL,MAAMI,SAAS;QACf,MAAMJ,UAAUG;QAChB,OAAO;YAAEC;YAAQJ;QAAQ;IAC3B;AACF;AAEO,MAAMzC;IASX8C,IAAIC,KAAoB,EAAE;QACxB,iEAAiE;QACjE,IAAIA,OAAOC,MAAMC,QAAQC,QAAQ;YAC/B;QACF;QAEA,2BAA2B;QAC3B,IAAIH,MAAMC,IAAI,EAAEC,QAAQE,IAAI;YAC1B,IAAI,CAAC,IAAI,CAACC,UAAU,CAACrB,GAAG,CAACgB,MAAMC,IAAI,CAACC,MAAM,CAACE,EAAE,GAAG;gBAC9C,IAAI,CAACC,UAAU,CAAClB,GAAG,CAACa,MAAMC,IAAI,CAACC,MAAM,CAACE,EAAE,EAAE,EAAE;YAC9C;YACA,IAAI,CAACC,UAAU,CAACjB,GAAG,CAACY,MAAMC,IAAI,CAACC,MAAM,CAACE,EAAE,EAAGE,IAAI,CAACN;QAClD;QAEA,0DAA0D;QAC1D,IAAI,IAAI,CAACO,OAAO,CAACC,QAAQ,GAAIR,MAAMS,KAAK,EAAE;YACxC;QACF;QAEA,yBAAyB;QACzB,IAAI,IAAI,CAACF,OAAO,CAACG,OAAO,IAAIV,MAAMC,IAAI,EAAEC,QAAQ;YAC9C,OAAO,IAAI,CAACS,qBAAqB,CAACX;QACpC;QAEA,4BAA4B;QAC5B,IAAIA,MAAMC,IAAI,IAAID,MAAMC,IAAI,CAACC,MAAM,EAAE;YACnC,OAAO,IAAI,CAACU,cAAc,CAACZ;QAC7B;QAEA,8CAA8C;QAC9C,IAAIA,MAAMa,GAAG,EAAE;YACb,OAAO,IAAI,CAACC,KAAK,CAACd,MAAMa,GAAG;QAC7B;IACF;IAEQE,WAAWf,KAAoB,EAAEN,OAAe,EAAE;QACxD,IAAII,SAAS;QACb,IAAIe,MAAMnB;QAEV,IAAIM,OAAOC,MAAMC,QAAQ;YACvB,MAAM,EAAEc,WAAW,EAAElD,IAAI,EAAE,GAAGkC,MAAMC,IAAI,CAACC,MAAM;YAC/C,MAAMe,iBAAiBrB,UAAUL,iBAAiByB,eAAe,UAAUlD,OAAO+C;YAClFf,SAASmB,eAAenB,MAAM;YAC9Be,MAAMI,eAAevB,OAAO;QAC9B;QAEA,IAAI,CAACoB,KAAK,CAAC,GAAGhB,SAASA,SAAS,MAAM,KAAKe,KAAK;IAClD;IAEQC,MAAMpB,OAAe,EAAE;QAC7B,IAAI,CAACwB,SAAS,CAACC,KAAK,CAACzB,UAAU;IACjC;IAEQkB,eAAeZ,KAAuD,EAAE;QAC9E,MAAMoB,UAAUlE,MAAM,CAAC8C,MAAMS,KAAK,CAAC;QACnC,MAAMR,OAAOD,MAAMC,IAAI;QAEvB,IAAIoB,IAAAA,8CAAsB,EAACpB,OAAO;YAChC,MAAM,EAAE3B,IAAI,EAAEgD,QAAQ,EAAE,GAAGrB;YAC3B,OAAQA,KAAKsB,MAAM;gBACjB,KAAK;oBACH,OAAO,IAAI,CAACR,UAAU,CAACf,OAAOoB,QAAQ,GAAGlE,OAAOc,EAAE,CAAC,KAAK,MAAM,CAAC;gBAEjE,KAAK;oBACH,OAAO,IAAI,CAAC+C,UAAU,CAACf,OAAOoB,QAAQ,GAAGlE,OAAOc,EAAE,CAAC,KAAK,QAAQ,EAAEwD,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAACH,YAAa;gBAE5G,KAAK;oBACH,OAAO,IAAI,CAACP,UAAU,CAACf,OAAOoB,QAAQ,GAAGlE,OAAOQ,KAAK,CAAC,KAAK,KAAK,CAAC;gBAEnE,KAAK;oBACH,OAAO,IAAI,CAACqD,UAAU,CAACf,OAAOoB,QAAQ,GAAGlE,OAAOc,EAAE,CAAC,KAAK,QAAQ,EAAEM,MAAO;gBAE3E,KAAK;oBACH,OAAO,IAAI,CAACyC,UAAU,CAACf,OAAOoB,QAAQ,GAAGlE,OAAOO,IAAI,CAAC,KAAK,QAAQ,CAAC;gBAErE,KAAK;oBACH,OAAO,IAAI,CAACsD,UAAU,CAACf,OAAOoB,QAAQ,GAAGlE,OAAOO,IAAI,CAAC,KAAK,OAAO,CAAC;YACtE;QACF,OAAO;YACL,OAAO,IAAI,CAACsD,UAAU,CAACf,OAAOoB,QAAQ,QAAQ3B,UAAUO,MAAMa,GAAG;QACnE;IACF;IAEQF,sBAAsBX,KAAuD,EAAE;QACrF,MAAMC,OAAOD,MAAMC,IAAI;QAEvB,MAAMC,SAASD,KAAKC,MAAM;QAC1B,MAAM,EAAEE,EAAE,EAAE,GAAGF;QAEf,IACEmB,IAAAA,8CAAsB,EAACpB,SACtBA,CAAAA,KAAKsB,MAAM,KAAK,aAAatB,KAAKsB,MAAM,KAAK,YAAYtB,KAAKsB,MAAM,KAAK,aAAatB,KAAKsB,MAAM,KAAK,SAAQ,GAC/G;YACA,MAAMG,UAAU,IAAI,CAACrB,UAAU,CAACjB,GAAG,CAACgB;YAEpC,KAAK,MAAMuB,eAAeD,QAAS;gBACjC,IAAI,CAACd,cAAc,CAACe;YACtB;YAEA,IAAID,QAAQxC,MAAM,GAAG,GAAG;gBACtB,IAAI,CAAC0C,EAAE;YACT;QACF;IACF;IAEAA,KAAK;QACH,IAAI,CAACd,KAAK,CAAC,IAAIe,MAAM,CAAC;IACxB;IAEAC,UAAUC,mBAAwC,EAAE;QAClD,MAAM,EAAEC,UAAU,EAAEC,iBAAiB,EAAEX,QAAQ,EAAE,GAAGS;QACpD,MAAM,EAAEG,MAAM,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAEC,OAAO,EAAE,GAAGL;QAEvD,MAAMM,gBAEF;YACFF,SAAShF,cAAK,CAACmF,WAAW;YAC1BN,QAAQ7E,cAAK,CAACoF,SAAS;YACvBL,SAAS/E,cAAK,CAACG,IAAI;YACnBkF,SAASrF,cAAK,CAACa,MAAM;YACrBoE,SAASjF,cAAK,CAACG,IAAI;YACnB2E,SAAS9E,cAAK,CAACY,GAAG;YAClB0E,QAAQtF,cAAK,CAACuF,OAAO;QACvB;QAEA,IAAIZ,WAAWa,IAAI,GAAG,GAAG;YACvB,IAAI,CAAC/B,KAAK,CAACzD,cAAK,CAACyF,UAAU,CAAC,CAAC,SAAS,CAAC;YAEvC,IAAI,CAAClB,EAAE;YAEP,MAAMmB,iBAAiBC,IAAAA,oCAAiB,EAAC;mBAAIhB,WAAWiB,MAAM;aAAG;YAEjE,KAAK,MAAMC,iBAAiBH,eAAgB;gBAC1C,IAAIG,cAAchD,MAAM,CAACC,MAAM,EAAE;oBAC/B;gBACF;gBAEA,MAAMiB,UAAUmB,aAAa,CAACW,cAAc3B,MAAM,CAAC,IAAIlE,cAAK,CAACC,KAAK;gBAClE,MAAM4C,SAASgD,cAAchD,MAAM;gBACnC,MAAMiD,eAAe,CAAC,CAACD,cAAc5B,QAAQ,IAAI,CAAC,CAAC4B,cAAcE,SAAS;gBAC1E,MAAMC,gBAAkCF,eAAeG,IAAAA,wBAAU,EAACJ,cAAcE,SAAS,EAAEF,cAAcK,SAAS,IAAI;oBAAC;oBAAG;iBAAE;gBAE5H,IAAI,CAACzC,KAAK,CACR,GAAGvB,iBAAiBW,OAAOc,WAAW,IAAI,UAAUd,OAAOpC,IAAI,EAAE,CAAC,EAAEsD,QAClE,GAAG8B,cAAc3B,MAAM,KAAK,YAAY,yBAAyB2B,cAAc3B,MAAM,GACnF4B,eACI,CAAC,OAAO,EAAE3B,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAACyB,cAAc5B,QAAQ,GAAG,aAAa,EAAEE,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAAC4B,iBAAiB,GACzH,IACJ,GACD;YAEP;YAEA,IAAI,CAACvC,KAAK,CACR,CAAC,SAAS,EAAEuB,QAAQnD,MAAM,CAAC,WAAW,EAAEkD,QAAQlD,MAAM,CAAC,WAAW,EAAEoD,QAAQpD,MAAM,CAAC,WAAW,EAAEiD,QAAQjD,MAAM,CAAC,UAAU,EAAEgD,OAAOhD,MAAM,EAAE;YAG5I,IAAI,CAAC4B,KAAK,CACR,CAAC,iBAAiB,EAAEiB,oBAAoByB,cAAc,CAAC,2BAA2B,EAAEC,IAAAA,wBAAW,EAC7F1B,oBAAoB2B,oBAAoB,GACvC;QAEP,OAAO;YACL,IAAI,CAAC5C,KAAK,CAAC;QACb;QAEA,IAAI,CAACc,EAAE;QAEP,IAAIM,UAAUA,OAAOhD,MAAM,GAAG,GAAG;YAC/B,KAAK,MAAMyE,YAAYzB,OAAQ;gBAC7B,MAAMhC,SAAS8B,WAAW5C,GAAG,CAACuE,WAAWzD;gBAEzC,IAAIA,QAAQ;oBACV,MAAM,EAAEc,WAAW,EAAElD,IAAI,EAAE,GAAGoC;oBAC9B,MAAM0D,cAAc,IAAI,CAACvD,UAAU,CAACjB,GAAG,CAACuE;oBAExC,IAAI,CAAC7C,KAAK,CAAC,CAAC,CAAC,EAAE5D,OAAOa,GAAG,CAACiD,eAAe,UAAU,CAAC,EAAE9D,OAAOY,IAAI,CAACA,MAAM,EAAE,EAAEZ,MAAM,CAACC,gBAAQ,CAACO,KAAK,CAAC,CAAC,mBAAmB;oBAEtH,IAAIkG,aAAa;wBACf,KAAK,MAAM5D,SAAS4D,YAAa;4BAC/B,kDAAkD;4BAClD,IAAI,CAAC9C,KAAK,CAACd,MAAMa,GAAG;wBACtB;oBACF;oBAEA,IAAI,CAACe,EAAE;gBACT;YACF;QACF;QAEA,MAAMiC,eAAe;eAAI7B,WAAWiB,MAAM;SAAG,CAACa,MAAM,CAAC,CAACC,MAAQ,CAACA,IAAI7D,MAAM,CAACC,MAAM,EAAEjB,MAAM,KAAKkD,QAAQlD,MAAM;QAC3G,MAAM8E,kBAAkBH,eAAeI,IAAAA,uBAAQ,EAAC;YAAEC,GAAG;YAAKC,GAAG;YAAKC,GAAG;QAAG,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IAAI;QAE7G,IAAI,CAACtD,KAAK,CAAC,CAAC,gBAAgB,EAAEU,IAAAA,4BAAc,EAACC,IAAAA,yBAAW,EAACH,WAAW,cAAc,EAAE0C,iBAAiB;IACvG;IAEAK,kBAAkB;QAChB,IAAI,CAAChE,UAAU,CAACiE,KAAK;IACvB;IA1MAC,YAAY,AAAQhE,OAAmD,CAAE;;QAJzEW,uBAAAA,aAAAA,KAAAA;QACA,uBAAQb,cAAR,KAAA;QACA,uBAASmE,kBAAT,KAAA;aAEoBjE,UAAAA;aAJpBW,YAAsBuD,QAAQC,MAAM;aAC5BrE,aAAa,IAAIvB;aAChB0F,iBAAiB,IAAI1F;QAG5ByB,QAAQC,QAAQ,GAAGD,QAAQC,QAAQ,IAAIrD,gBAAQ,CAACC,IAAI;IACtD;AAyMF"}
1
+ {"version":3,"sources":["../src/LogReporter.ts"],"sourcesContent":["import { formatDuration, hrtimeDiff, hrToSeconds } from \"@lage-run/format-hrtime\";\nimport { isTargetStatusLogEntry } from \"./isTargetStatusLogEntry.js\";\nimport { LogLevel } from \"@lage-run/logger\";\nimport ansiRegex from \"ansi-regex\";\nimport chalk from \"chalk\";\nimport type { Chalk } from \"chalk\";\nimport gradient from \"gradient-string\";\nimport type { Reporter, LogEntry } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetStatus } from \"@lage-run/scheduler-types\";\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\nimport type { Writable } from \"stream\";\nimport crypto from \"crypto\";\nimport { formatBytes } from \"./formatBytes.js\";\nimport { slowestTargetRuns } from \"./slowestTargetRuns.js\";\n\nconst colors = {\n [LogLevel.info]: chalk.white,\n [LogLevel.verbose]: chalk.gray,\n [LogLevel.warn]: chalk.white,\n [LogLevel.error]: chalk.hex(\"#FF1010\"),\n [LogLevel.silly]: chalk.green,\n task: chalk.hex(\"#00DDDD\"),\n pkg: chalk.hex(\"#FFD66B\"),\n ok: chalk.green,\n error: chalk.red,\n warn: chalk.yellow,\n};\n\n// Monokai color scheme\nconst pkgColors: Chalk[] = [\n chalk.hex(\"#e5b567\"),\n chalk.hex(\"#b4d273\"),\n chalk.hex(\"#e87d3e\"),\n chalk.hex(\"#9e86c8\"),\n chalk.hex(\"#b05279\"),\n chalk.hex(\"#6c99bb\"),\n];\n\nfunction hashStringToNumber(str: string): number {\n const hash = crypto.createHash(\"md5\");\n hash.update(str);\n const hex = hash.digest(\"hex\").substring(0, 6);\n return parseInt(hex, 16);\n}\n\nconst pkgNameToIndexInPkgColorArray = new Map<string, number>();\n\nfunction getColorForPkg(pkg: string): Chalk {\n if (!pkgNameToIndexInPkgColorArray.has(pkg)) {\n const index = hashStringToNumber(pkg) % pkgColors.length;\n pkgNameToIndexInPkgColorArray.set(pkg, index);\n }\n\n return pkgColors[pkgNameToIndexInPkgColorArray.get(pkg)!];\n}\n\nconst stripAnsiRegex = ansiRegex();\n\nfunction getTaskLogPrefix(pkg: string, task: string) {\n const pkgColor = getColorForPkg(pkg);\n return `${pkgColor(pkg)} ${colors.task(task)}`;\n}\n\nfunction stripAnsi(message: string) {\n return message.replace(stripAnsiRegex, \"\");\n}\n\nfunction normalize(prefixOrMessage: string, message?: string) {\n if (typeof message === \"string\") {\n const prefix = prefixOrMessage;\n return { prefix, message };\n } else {\n const prefix = \"\";\n const message = prefixOrMessage;\n return { prefix, message };\n }\n}\n\nexport class LogReporter implements Reporter {\n logStream: Writable = process.stdout;\n private logEntries = new Map<string, LogEntry[]>();\n readonly groupedEntries = new Map<string, LogEntry[]>();\n\n constructor(private options: { logLevel?: LogLevel; grouped?: boolean }) {\n options.logLevel = options.logLevel || LogLevel.info;\n }\n\n log(entry: LogEntry<any>) {\n // if \"hidden\", do not even attempt to record or report the entry\n if (entry?.data?.target?.hidden) {\n return;\n }\n\n // save the logs for errors\n if (entry.data?.target?.id) {\n if (!this.logEntries.has(entry.data.target.id)) {\n this.logEntries.set(entry.data.target.id, []);\n }\n this.logEntries.get(entry.data.target.id)!.push(entry);\n }\n\n // if loglevel is not high enough, do not report the entry\n if (this.options.logLevel! < entry.level) {\n return;\n }\n\n // log to grouped entries\n if (this.options.grouped && entry.data?.target) {\n return this.logTargetEntryByGroup(entry);\n }\n\n // log normal target entries\n if (entry.data && entry.data.target) {\n return this.logTargetEntry(entry);\n }\n\n // log generic entries (not related to target)\n if (entry.msg) {\n return this.print(entry.msg);\n }\n }\n\n private printEntry(entry: LogEntry<any>, message: string) {\n let prefix = \"\";\n let msg = message;\n\n if (entry?.data?.target) {\n const { packageName, task } = entry.data.target;\n const normalizedArgs = normalize(getTaskLogPrefix(packageName ?? \"<root>\", task), msg);\n prefix = normalizedArgs.prefix;\n msg = normalizedArgs.message;\n }\n\n this.print(`${prefix ? prefix + \" \" : \"\"}${msg}`);\n }\n\n private print(message: string) {\n this.logStream.write(message + \"\\n\");\n }\n\n private logTargetEntry(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const colorFn = colors[entry.level];\n const data = entry.data!;\n\n if (isTargetStatusLogEntry(data)) {\n const { hash, duration } = data;\n switch (data.status) {\n case \"running\":\n return this.printEntry(entry, colorFn(`${colors.ok(\"➔\")} start`));\n\n case \"success\":\n return this.printEntry(entry, colorFn(`${colors.ok(\"✓\")} done - ${formatDuration(hrToSeconds(duration!))}`));\n\n case \"failed\":\n return this.printEntry(entry, colorFn(`${colors.error(\"✖\")} fail`));\n\n case \"skipped\":\n return this.printEntry(entry, colorFn(`${colors.ok(\"»\")} skip - ${hash!}`));\n\n case \"aborted\":\n return this.printEntry(entry, colorFn(`${colors.warn(\"-\")} aborted`));\n\n case \"queued\":\n return this.printEntry(entry, colorFn(`${colors.warn(\"…\")} queued`));\n }\n } else {\n return this.printEntry(entry, colorFn(\": \" + stripAnsi(entry.msg)));\n }\n }\n\n private logTargetEntryByGroup(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const data = entry.data!;\n\n const target = data.target;\n const { id } = target;\n\n if (\n isTargetStatusLogEntry(data) &&\n (data.status === \"success\" || data.status === \"failed\" || data.status === \"skipped\" || data.status === \"aborted\")\n ) {\n const entries = this.logEntries.get(id)! as LogEntry<TargetStatusEntry>[];\n\n for (const targetEntry of entries) {\n this.logTargetEntry(targetEntry);\n }\n\n if (entries.length > 2) {\n this.hr();\n }\n }\n }\n\n hr() {\n this.print(\"┈\".repeat(80));\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, targetRunByStatus, duration } = schedulerRunSummary;\n const { failed, aborted, skipped, success, pending } = targetRunByStatus;\n\n const statusColorFn: {\n [status in TargetStatus]: chalk.Chalk;\n } = {\n success: chalk.greenBright,\n failed: chalk.redBright,\n skipped: chalk.gray,\n running: chalk.yellow,\n pending: chalk.gray,\n aborted: chalk.red,\n queued: chalk.magenta,\n };\n\n if (targetRuns.size > 0) {\n this.print(chalk.cyanBright(`\\nSummary`));\n\n this.hr();\n\n const slowestTargets = slowestTargetRuns([...targetRuns.values()]);\n\n for (const wrappedTarget of slowestTargets) {\n if (wrappedTarget.target.hidden) {\n continue;\n }\n\n const colorFn = statusColorFn[wrappedTarget.status] ?? chalk.white;\n const target = wrappedTarget.target;\n const hasDurations = !!wrappedTarget.duration && !!wrappedTarget.queueTime;\n const queueDuration: [number, number] = hasDurations ? hrtimeDiff(wrappedTarget.queueTime, wrappedTarget.startTime) : [0, 0];\n\n this.print(\n `${getTaskLogPrefix(target.packageName || \"<root>\", target.task)} ${colorFn(\n `${wrappedTarget.status === \"running\" ? \"running - incomplete\" : wrappedTarget.status}${\n hasDurations\n ? `, took ${formatDuration(hrToSeconds(wrappedTarget.duration))}, queued for ${formatDuration(hrToSeconds(queueDuration))}`\n : \"\"\n }`\n )}`\n );\n }\n\n this.print(\n `success: ${success.length}, skipped: ${skipped.length}, pending: ${pending.length}, aborted: ${aborted.length}, failed: ${failed.length}`\n );\n\n this.print(\n `worker restarts: ${schedulerRunSummary.workerRestarts}, max worker memory usage: ${formatBytes(\n schedulerRunSummary.maxWorkerMemoryUsage\n )}`\n );\n } else {\n this.print(\"Nothing has been run.\");\n }\n\n this.hr();\n\n if (failed && failed.length > 0) {\n for (const targetId of failed) {\n const target = targetRuns.get(targetId)?.target;\n\n if (target) {\n const { packageName, task } = target;\n const failureLogs = this.logEntries.get(targetId);\n\n this.print(`[${colors.pkg(packageName ?? \"<root>\")} ${colors.task(task)}] ${colors[LogLevel.error](\"ERROR DETECTED\")}`);\n\n if (failureLogs) {\n for (const entry of failureLogs) {\n // Log each entry separately to prevent truncation\n this.print(entry.msg);\n }\n }\n\n this.hr();\n }\n }\n }\n\n const allCacheHits = [...targetRuns.values()].filter((run) => !run.target.hidden).length === skipped.length;\n const allCacheHitText = allCacheHits ? gradient({ r: 237, g: 178, b: 77 }, \"cyan\")(`All targets skipped!`) : \"\";\n\n this.print(`Took a total of ${formatDuration(hrToSeconds(duration))} to complete. ${allCacheHitText}`);\n }\n\n resetLogEntries() {\n this.logEntries.clear();\n }\n}\n"],"names":["LogReporter","colors","LogLevel","info","chalk","white","verbose","gray","warn","error","hex","silly","green","task","pkg","ok","red","yellow","pkgColors","hashStringToNumber","str","hash","crypto","createHash","update","digest","substring","parseInt","pkgNameToIndexInPkgColorArray","Map","getColorForPkg","has","index","length","set","get","stripAnsiRegex","ansiRegex","getTaskLogPrefix","pkgColor","stripAnsi","message","replace","normalize","prefixOrMessage","prefix","log","entry","data","target","hidden","id","logEntries","push","options","logLevel","level","grouped","logTargetEntryByGroup","logTargetEntry","msg","print","printEntry","packageName","normalizedArgs","logStream","write","colorFn","isTargetStatusLogEntry","duration","status","formatDuration","hrToSeconds","entries","targetEntry","hr","repeat","summarize","schedulerRunSummary","targetRuns","targetRunByStatus","failed","aborted","skipped","success","pending","statusColorFn","greenBright","redBright","running","queued","magenta","size","cyanBright","slowestTargets","slowestTargetRuns","values","wrappedTarget","hasDurations","queueTime","queueDuration","hrtimeDiff","startTime","workerRestarts","formatBytes","maxWorkerMemoryUsage","targetId","failureLogs","allCacheHits","filter","run","allCacheHitText","gradient","r","g","b","resetLogEntries","clear","groupedEntries","process","stdout"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ProgressReporter.ts"],"sourcesContent":["import EventEmitter from \"events\";\nimport { type LogEntry, LogLevel, type Reporter } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetStatus } from \"@lage-run/scheduler-types\";\n\n// @ts-ignore Ignoring ESM in CJS errors here, but still importing the types to be used\n// import type { TaskReporter as TaskReporterType, TaskReporterTask } from \"@ms-cloudpack/task-reporter\";\nimport { TaskReporter, type TaskReporterTask } from \"@ms-cloudpack/task-reporter\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport gradient from \"gradient-string\";\nimport chalk from \"chalk\";\nimport type { Writable } from \"stream\";\nimport { formatDuration, hrToSeconds, hrtimeDiff } from \"@lage-run/format-hrtime\";\nimport { formatBytes } from \"./formatBytes.js\";\nimport { slowestTargetRuns } from \"./slowestTargetRuns.js\";\n\nconst colors = {\n [LogLevel.info]: chalk.white,\n [LogLevel.verbose]: chalk.gray,\n [LogLevel.warn]: chalk.white,\n [LogLevel.error]: chalk.hex(\"#FF1010\"),\n [LogLevel.silly]: chalk.green,\n task: chalk.hex(\"#00DDDD\"),\n pkg: chalk.hex(\"#FFD66B\"),\n ok: chalk.green,\n error: chalk.red,\n warn: chalk.yellow,\n};\n\nfunction fancy(str: string) {\n return gradient({ r: 237, g: 178, b: 77 }, \"cyan\")(str);\n}\n\nexport class ProgressReporter implements Reporter {\n logStream: Writable = process.stdout;\n startTime: [number, number] = [0, 0];\n\n logEvent: EventEmitter = new EventEmitter();\n logEntries = new Map<string, LogEntry[]>();\n\n taskReporter: TaskReporter;\n tasks: Map<string, TaskReporterTask> = new Map();\n\n constructor(private options: { concurrency: number; version: string } = { concurrency: 0, version: \"0.0.0\" }) {\n this.taskReporter = this.createTaskReporter();\n\n this.print(`${fancy(\"lage\")} - Version ${options.version} - ${options.concurrency} Workers`);\n }\n\n createTaskReporter() {\n return new TaskReporter({\n productName: \"lage\",\n version: this.options.version,\n\n showCompleted: true,\n showConsoleDebug: true,\n showConsoleError: true,\n showConsoleInfo: true,\n showConsoleLog: true,\n showConsoleWarn: true,\n showErrors: true,\n showPending: true,\n showProgress: true,\n showStarted: true,\n showSummary: true,\n showTaskDetails: true,\n showTaskExtended: true,\n });\n }\n\n log(entry: LogEntry<any>) {\n // save the logs for errors\n if (entry.data?.target?.id) {\n if (!this.logEntries.has(entry.data.target.id)) {\n this.logEntries.set(entry.data.target.id, []);\n }\n this.logEntries.get(entry.data.target.id)!.push(entry);\n }\n\n // if \"hidden\", do not even attempt to record or report the entry\n if (entry?.data?.target?.hidden) {\n return;\n }\n\n if (entry.data && entry.data.schedulerRun) {\n this.startTime = entry.data.schedulerRun.startTime;\n }\n\n if (entry.data && entry.data.status && entry.data.target) {\n const target: Target = entry.data.target;\n const status: TargetStatus = entry.data.status;\n\n const reporterTask = this.tasks.has(target.id) ? this.tasks.get(target.id) : this.taskReporter.addTask(target.label, true);\n\n if (reporterTask) {\n this.tasks.set(target.id, reporterTask);\n switch (status) {\n case \"running\":\n reporterTask.start();\n break;\n\n case \"success\":\n reporterTask.complete({ status: \"complete\" });\n break;\n\n case \"aborted\":\n reporterTask.complete({ status: \"abort\" });\n break;\n\n case \"skipped\":\n reporterTask.complete({ status: \"skip\" });\n break;\n\n case \"failed\":\n reporterTask.complete({ status: \"fail\" });\n break;\n }\n }\n }\n }\n\n private print(message: string) {\n this.logStream.write(message + \"\\n\");\n }\n\n hr() {\n this.print(\"┈\".repeat(80));\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, targetRunByStatus, duration } = schedulerRunSummary;\n const { failed, aborted, skipped, success, pending, running, queued } = targetRunByStatus;\n\n // If we are printing summary, and there are still some running / queued tasks - report them as aborted\n for (const wrappedTarget of running.concat(queued)) {\n const reporterTask = this.tasks.get(wrappedTarget);\n if (reporterTask) {\n reporterTask.complete({ status: \"abort\" });\n }\n }\n\n const statusColorFn: {\n [status in TargetStatus]: chalk.Chalk;\n } = {\n success: chalk.greenBright,\n failed: chalk.redBright,\n skipped: chalk.gray,\n running: chalk.yellow,\n pending: chalk.gray,\n aborted: chalk.red,\n queued: chalk.magenta,\n };\n\n if (targetRuns.size > 0) {\n this.print(chalk.cyanBright(`\\nSummary`));\n\n this.hr();\n\n const slowestTargets = slowestTargetRuns([...targetRuns.values()]);\n\n for (const wrappedTarget of slowestTargets) {\n if (wrappedTarget.target.hidden) {\n continue;\n }\n\n const colorFn = statusColorFn[wrappedTarget.status] ?? chalk.white;\n const target = wrappedTarget.target;\n const hasDurations = !!wrappedTarget.duration && !!wrappedTarget.queueTime;\n const queueDuration: [number, number] = hasDurations ? hrtimeDiff(wrappedTarget.queueTime, wrappedTarget.startTime) : [0, 0];\n\n if (wrappedTarget.status === \"running\") {\n const reporterTask = this.tasks.get(wrappedTarget.target.id);\n if (reporterTask) {\n reporterTask.complete({ status: \"fail\" });\n }\n }\n\n this.print(\n `${target.label} ${colorFn(\n `${wrappedTarget.status === \"running\" ? \"running - incomplete\" : wrappedTarget.status}${\n hasDurations\n ? `, took ${formatDuration(hrToSeconds(wrappedTarget.duration))}, queued for ${formatDuration(hrToSeconds(queueDuration))}`\n : \"\"\n }`\n )}`\n );\n }\n\n this.print(\n `success: ${success.length}, skipped: ${skipped.length}, pending: ${pending.length}, aborted: ${aborted.length}, failed: ${failed.length}`\n );\n\n this.print(\n `worker restarts: ${schedulerRunSummary.workerRestarts}, max worker memory usage: ${formatBytes(\n schedulerRunSummary.maxWorkerMemoryUsage\n )}`\n );\n } else {\n this.print(\"Nothing has been run.\");\n }\n\n this.hr();\n\n if (failed && failed.length > 0) {\n for (const targetId of failed) {\n const target = targetRuns.get(targetId)?.target;\n\n if (target) {\n const { packageName, task } = target;\n const failureLogs = this.logEntries.get(targetId);\n\n this.print(`[${colors.pkg(packageName ?? \"<root>\")} ${colors.task(task)}] ${colors[LogLevel.error](\"ERROR DETECTED\")}`);\n\n if (failureLogs) {\n for (const entry of failureLogs) {\n // Log each entry separately to prevent truncation\n this.print(entry.msg);\n }\n }\n\n this.hr();\n }\n }\n }\n\n const allCacheHits = [...targetRuns.values()].filter((run) => !run.target.hidden).length === skipped.length;\n const allCacheHitText = allCacheHits ? fancy(`All targets skipped!`) : \"\";\n\n this.print(`Took a total of ${formatDuration(hrToSeconds(duration))} to complete. ${allCacheHitText}`);\n }\n}\n"],"names":["ProgressReporter","colors","LogLevel","info","chalk","white","verbose","gray","warn","error","hex","silly","green","task","pkg","ok","red","yellow","fancy","str","gradient","r","g","b","createTaskReporter","TaskReporter","productName","version","options","showCompleted","showConsoleDebug","showConsoleError","showConsoleInfo","showConsoleLog","showConsoleWarn","showErrors","showPending","showProgress","showStarted","showSummary","showTaskDetails","showTaskExtended","log","entry","data","target","id","logEntries","has","set","get","push","hidden","schedulerRun","startTime","status","reporterTask","tasks","taskReporter","addTask","label","start","complete","print","message","logStream","write","hr","repeat","summarize","schedulerRunSummary","targetRuns","targetRunByStatus","duration","failed","aborted","skipped","success","pending","running","queued","wrappedTarget","concat","statusColorFn","greenBright","redBright","magenta","size","cyanBright","slowestTargets","slowestTargetRuns","values","colorFn","hasDurations","queueTime","queueDuration","hrtimeDiff","formatDuration","hrToSeconds","length","workerRestarts","formatBytes","maxWorkerMemoryUsage","targetId","packageName","failureLogs","msg","allCacheHits","filter","run","allCacheHitText","constructor","concurrency","logEvent","process","stdout","EventEmitter","Map"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/ProgressReporter.ts"],"sourcesContent":["import EventEmitter from \"events\";\nimport { type LogEntry, LogLevel, type Reporter } from \"@lage-run/logger\";\nimport type { SchedulerRunSummary, TargetStatus } from \"@lage-run/scheduler-types\";\n\n// @ts-ignore Ignoring ESM in CJS errors here, but still importing the types to be used\n// import type { TaskReporter as TaskReporterType, TaskReporterTask } from \"@ms-cloudpack/task-reporter\";\nimport { TaskReporter, type TaskReporterTask } from \"@ms-cloudpack/task-reporter\";\nimport type { Target } from \"@lage-run/target-graph\";\nimport gradient from \"gradient-string\";\nimport chalk from \"chalk\";\nimport type { Writable } from \"stream\";\nimport { formatDuration, hrToSeconds, hrtimeDiff } from \"@lage-run/format-hrtime\";\nimport { formatBytes } from \"./formatBytes.js\";\nimport { slowestTargetRuns } from \"./slowestTargetRuns.js\";\n\nconst colors = {\n [LogLevel.info]: chalk.white,\n [LogLevel.verbose]: chalk.gray,\n [LogLevel.warn]: chalk.white,\n [LogLevel.error]: chalk.hex(\"#FF1010\"),\n [LogLevel.silly]: chalk.green,\n task: chalk.hex(\"#00DDDD\"),\n pkg: chalk.hex(\"#FFD66B\"),\n ok: chalk.green,\n error: chalk.red,\n warn: chalk.yellow,\n};\n\nfunction fancy(str: string) {\n return gradient({ r: 237, g: 178, b: 77 }, \"cyan\")(str);\n}\n\nexport class ProgressReporter implements Reporter {\n logStream: Writable = process.stdout;\n startTime: [number, number] = [0, 0];\n\n logEvent: EventEmitter = new EventEmitter();\n logEntries = new Map<string, LogEntry[]>();\n\n taskReporter: TaskReporter;\n tasks: Map<string, TaskReporterTask> = new Map();\n\n constructor(private options: { concurrency: number; version: string } = { concurrency: 0, version: \"0.0.0\" }) {\n this.taskReporter = this.createTaskReporter();\n\n this.print(`${fancy(\"lage\")} - Version ${options.version} - ${options.concurrency} Workers`);\n }\n\n createTaskReporter() {\n return new TaskReporter({\n productName: \"lage\",\n version: this.options.version,\n\n showCompleted: true,\n showConsoleDebug: true,\n showConsoleError: true,\n showConsoleInfo: true,\n showConsoleLog: true,\n showConsoleWarn: true,\n showErrors: true,\n showPending: true,\n showProgress: true,\n showStarted: true,\n showSummary: true,\n showTaskDetails: true,\n showTaskExtended: true,\n });\n }\n\n log(entry: LogEntry<any>) {\n // save the logs for errors\n if (entry.data?.target?.id) {\n if (!this.logEntries.has(entry.data.target.id)) {\n this.logEntries.set(entry.data.target.id, []);\n }\n this.logEntries.get(entry.data.target.id)!.push(entry);\n }\n\n // if \"hidden\", do not even attempt to record or report the entry\n if (entry?.data?.target?.hidden) {\n return;\n }\n\n if (entry.data && entry.data.schedulerRun) {\n this.startTime = entry.data.schedulerRun.startTime;\n }\n\n if (entry.data && entry.data.status && entry.data.target) {\n const target: Target = entry.data.target;\n const status: TargetStatus = entry.data.status;\n\n const reporterTask = this.tasks.has(target.id) ? this.tasks.get(target.id) : this.taskReporter.addTask(target.label, true);\n\n if (reporterTask) {\n this.tasks.set(target.id, reporterTask);\n switch (status) {\n case \"running\":\n reporterTask.start();\n break;\n\n case \"success\":\n reporterTask.complete({ status: \"complete\" });\n break;\n\n case \"aborted\":\n reporterTask.complete({ status: \"abort\" });\n break;\n\n case \"skipped\":\n reporterTask.complete({ status: \"skip\" });\n break;\n\n case \"failed\":\n reporterTask.complete({ status: \"fail\" });\n break;\n }\n }\n }\n }\n\n private print(message: string) {\n this.logStream.write(message + \"\\n\");\n }\n\n hr() {\n this.print(\"┈\".repeat(80));\n }\n\n summarize(schedulerRunSummary: SchedulerRunSummary) {\n const { targetRuns, targetRunByStatus, duration } = schedulerRunSummary;\n const { failed, aborted, skipped, success, pending, running, queued } = targetRunByStatus;\n\n // If we are printing summary, and there are still some running / queued tasks - report them as aborted\n for (const wrappedTarget of running.concat(queued)) {\n const reporterTask = this.tasks.get(wrappedTarget);\n if (reporterTask) {\n reporterTask.complete({ status: \"abort\" });\n }\n }\n\n const statusColorFn: {\n [status in TargetStatus]: chalk.Chalk;\n } = {\n success: chalk.greenBright,\n failed: chalk.redBright,\n skipped: chalk.gray,\n running: chalk.yellow,\n pending: chalk.gray,\n aborted: chalk.red,\n queued: chalk.magenta,\n };\n\n if (targetRuns.size > 0) {\n this.print(chalk.cyanBright(`\\nSummary`));\n\n this.hr();\n\n const slowestTargets = slowestTargetRuns([...targetRuns.values()]);\n\n for (const wrappedTarget of slowestTargets) {\n if (wrappedTarget.target.hidden) {\n continue;\n }\n\n const colorFn = statusColorFn[wrappedTarget.status] ?? chalk.white;\n const target = wrappedTarget.target;\n const hasDurations = !!wrappedTarget.duration && !!wrappedTarget.queueTime;\n const queueDuration: [number, number] = hasDurations ? hrtimeDiff(wrappedTarget.queueTime, wrappedTarget.startTime) : [0, 0];\n\n if (wrappedTarget.status === \"running\") {\n const reporterTask = this.tasks.get(wrappedTarget.target.id);\n if (reporterTask) {\n reporterTask.complete({ status: \"fail\" });\n }\n }\n\n this.print(\n `${target.label} ${colorFn(\n `${wrappedTarget.status === \"running\" ? \"running - incomplete\" : wrappedTarget.status}${\n hasDurations\n ? `, took ${formatDuration(hrToSeconds(wrappedTarget.duration))}, queued for ${formatDuration(hrToSeconds(queueDuration))}`\n : \"\"\n }`\n )}`\n );\n }\n\n this.print(\n `success: ${success.length}, skipped: ${skipped.length}, pending: ${pending.length}, aborted: ${aborted.length}, failed: ${failed.length}`\n );\n\n this.print(\n `worker restarts: ${schedulerRunSummary.workerRestarts}, max worker memory usage: ${formatBytes(\n schedulerRunSummary.maxWorkerMemoryUsage\n )}`\n );\n } else {\n this.print(\"Nothing has been run.\");\n }\n\n this.hr();\n\n if (failed && failed.length > 0) {\n for (const targetId of failed) {\n const target = targetRuns.get(targetId)?.target;\n\n if (target) {\n const { packageName, task } = target;\n const failureLogs = this.logEntries.get(targetId);\n\n this.print(`[${colors.pkg(packageName ?? \"<root>\")} ${colors.task(task)}] ${colors[LogLevel.error](\"ERROR DETECTED\")}`);\n\n if (failureLogs) {\n for (const entry of failureLogs) {\n // Log each entry separately to prevent truncation\n this.print(entry.msg);\n }\n }\n\n this.hr();\n }\n }\n }\n\n const allCacheHits = [...targetRuns.values()].filter((run) => !run.target.hidden).length === skipped.length;\n const allCacheHitText = allCacheHits ? fancy(`All targets skipped!`) : \"\";\n\n this.print(`Took a total of ${formatDuration(hrToSeconds(duration))} to complete. ${allCacheHitText}`);\n }\n}\n"],"names":["ProgressReporter","colors","LogLevel","info","chalk","white","verbose","gray","warn","error","hex","silly","green","task","pkg","ok","red","yellow","fancy","str","gradient","r","g","b","createTaskReporter","TaskReporter","productName","version","options","showCompleted","showConsoleDebug","showConsoleError","showConsoleInfo","showConsoleLog","showConsoleWarn","showErrors","showPending","showProgress","showStarted","showSummary","showTaskDetails","showTaskExtended","log","entry","data","target","id","logEntries","has","set","get","push","hidden","schedulerRun","startTime","status","reporterTask","tasks","taskReporter","addTask","label","start","complete","print","message","logStream","write","hr","repeat","summarize","schedulerRunSummary","targetRuns","targetRunByStatus","duration","failed","aborted","skipped","success","pending","running","queued","wrappedTarget","concat","statusColorFn","greenBright","redBright","magenta","size","cyanBright","slowestTargets","slowestTargetRuns","values","colorFn","hasDurations","queueTime","queueDuration","hrtimeDiff","formatDuration","hrToSeconds","length","workerRestarts","formatBytes","maxWorkerMemoryUsage","targetId","packageName","failureLogs","msg","allCacheHits","filter","run","allCacheHitText","concurrency","logEvent","process","stdout","EventEmitter","Map"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/VerboseFileLogReporter.ts"],"sourcesContent":["import { formatDuration, hrToSeconds } from \"@lage-run/format-hrtime\";\nimport { isTargetStatusLogEntry } from \"./isTargetStatusLogEntry.js\";\nimport { LogLevel } from \"@lage-run/logger\";\nimport ansiRegex from \"ansi-regex\";\nimport type { Reporter, LogEntry } from \"@lage-run/logger\";\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\nimport { Writable } from \"stream\";\nimport fs from \"fs\";\nimport path from \"path\";\n\nconst stripAnsiRegex = ansiRegex();\n\nfunction stripAnsi(message: string) {\n return message.replace(stripAnsiRegex, \"\");\n}\n\nexport class VerboseFileLogReporter implements Reporter {\n fileStream: Writable;\n constructor(logFile?: string) {\n // if logFile is falsy (not specified on cli args), this.fileStream just become a \"nowhere\" stream and this reporter effectively does nothing\n if (logFile) {\n const logFilePath = path.dirname(path.resolve(logFile));\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(logFilePath, { recursive: true });\n }\n }\n\n this.fileStream = logFile ? fs.createWriteStream(logFile) : new Writable({ write() {} });\n }\n\n cleanup() {\n this.fileStream?.end();\n }\n\n log(entry: LogEntry<any>) {\n // if \"hidden\", do not even attempt to record or report the entry\n if (entry?.data?.target?.hidden) {\n return;\n }\n\n // if loglevel is not high enough, do not report the entry\n if (LogLevel.verbose < entry.level) {\n return;\n }\n\n // log normal target entries\n if (entry.data && entry.data.target) {\n return this.logTargetEntry(entry);\n }\n\n // log generic entries (not related to target)\n if (entry.msg) {\n return this.print(`${entry.msg}`);\n }\n }\n\n private printEntry(entry: LogEntry<any>, message: string) {\n let packageAndTask = \"\";\n\n if (entry?.data?.target) {\n const { packageName, task } = entry.data.target;\n const pkg = packageName ?? \"<root>\";\n\n packageAndTask = `${pkg} ${task}`.trim();\n }\n\n this.print(`${this.getEntryTargetId(entry)} ${packageAndTask} ${message}`.trim());\n }\n\n private getEntryTargetId(entry: LogEntry<any>) {\n if (entry.data?.target?.id) {\n return `[:${entry.data.target.id}:]`;\n }\n\n return \"\";\n }\n\n private print(message: string) {\n this.fileStream?.write(message + \"\\n\");\n }\n\n private logTargetEntry(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const data = entry.data!;\n\n if (isTargetStatusLogEntry(data)) {\n const { hash, duration, status } = data;\n const statusMessages = {\n running: \"➔ start\",\n success: `✓ done - ${duration && formatDuration(hrToSeconds(duration))}`,\n failed: \"✖ fail\",\n skipped: `» skip - ${hash}`,\n aborted: \"- aborted\",\n queued: \"… queued\",\n };\n\n return this.printEntry(entry, statusMessages[status]);\n } else {\n const defaultMessage = `: ${stripAnsi(entry.msg)}`;\n return this.printEntry(entry, defaultMessage);\n }\n }\n\n summarize() {\n // No summary needed for VerboseFileLogReporter\n }\n}\n"],"names":["VerboseFileLogReporter","stripAnsiRegex","ansiRegex","stripAnsi","message","replace","cleanup","fileStream","end","log","entry","data","target","hidden","LogLevel","verbose","level","logTargetEntry","msg","print","printEntry","packageAndTask","packageName","task","pkg","trim","getEntryTargetId","id","write","isTargetStatusLogEntry","hash","duration","status","statusMessages","running","success","formatDuration","hrToSeconds","failed","skipped","aborted","queued","defaultMessage","summarize","constructor","logFile","logFilePath","path","dirname","resolve","fs","existsSync","mkdirSync","recursive","createWriteStream","Writable"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/VerboseFileLogReporter.ts"],"sourcesContent":["import { formatDuration, hrToSeconds } from \"@lage-run/format-hrtime\";\nimport { isTargetStatusLogEntry } from \"./isTargetStatusLogEntry.js\";\nimport { LogLevel } from \"@lage-run/logger\";\nimport ansiRegex from \"ansi-regex\";\nimport type { Reporter, LogEntry } from \"@lage-run/logger\";\nimport type { TargetMessageEntry, TargetStatusEntry } from \"./types/TargetLogEntry.js\";\nimport { Writable } from \"stream\";\nimport fs from \"fs\";\nimport path from \"path\";\n\nconst stripAnsiRegex = ansiRegex();\n\nfunction stripAnsi(message: string) {\n return message.replace(stripAnsiRegex, \"\");\n}\n\nexport class VerboseFileLogReporter implements Reporter {\n fileStream: Writable;\n constructor(logFile?: string) {\n // if logFile is falsy (not specified on cli args), this.fileStream just become a \"nowhere\" stream and this reporter effectively does nothing\n if (logFile) {\n const logFilePath = path.dirname(path.resolve(logFile));\n if (!fs.existsSync(logFilePath)) {\n fs.mkdirSync(logFilePath, { recursive: true });\n }\n }\n\n this.fileStream = logFile ? fs.createWriteStream(logFile) : new Writable({ write() {} });\n }\n\n cleanup() {\n this.fileStream?.end();\n }\n\n log(entry: LogEntry<any>) {\n // if \"hidden\", do not even attempt to record or report the entry\n if (entry?.data?.target?.hidden) {\n return;\n }\n\n // if loglevel is not high enough, do not report the entry\n if (LogLevel.verbose < entry.level) {\n return;\n }\n\n // log normal target entries\n if (entry.data && entry.data.target) {\n return this.logTargetEntry(entry);\n }\n\n // log generic entries (not related to target)\n if (entry.msg) {\n return this.print(`${entry.msg}`);\n }\n }\n\n private printEntry(entry: LogEntry<any>, message: string) {\n let packageAndTask = \"\";\n\n if (entry?.data?.target) {\n const { packageName, task } = entry.data.target;\n const pkg = packageName ?? \"<root>\";\n\n packageAndTask = `${pkg} ${task}`.trim();\n }\n\n this.print(`${this.getEntryTargetId(entry)} ${packageAndTask} ${message}`.trim());\n }\n\n private getEntryTargetId(entry: LogEntry<any>) {\n if (entry.data?.target?.id) {\n return `[:${entry.data.target.id}:]`;\n }\n\n return \"\";\n }\n\n private print(message: string) {\n this.fileStream?.write(message + \"\\n\");\n }\n\n private logTargetEntry(entry: LogEntry<TargetStatusEntry | TargetMessageEntry>) {\n const data = entry.data!;\n\n if (isTargetStatusLogEntry(data)) {\n const { hash, duration, status } = data;\n const statusMessages = {\n running: \"➔ start\",\n success: `✓ done - ${duration && formatDuration(hrToSeconds(duration))}`,\n failed: \"✖ fail\",\n skipped: `» skip - ${hash}`,\n aborted: \"- aborted\",\n queued: \"… queued\",\n };\n\n return this.printEntry(entry, statusMessages[status]);\n } else {\n const defaultMessage = `: ${stripAnsi(entry.msg)}`;\n return this.printEntry(entry, defaultMessage);\n }\n }\n\n summarize() {\n // No summary needed for VerboseFileLogReporter\n }\n}\n"],"names":["VerboseFileLogReporter","stripAnsiRegex","ansiRegex","stripAnsi","message","replace","cleanup","fileStream","end","log","entry","data","target","hidden","LogLevel","verbose","level","logTargetEntry","msg","print","printEntry","packageAndTask","packageName","task","pkg","trim","getEntryTargetId","id","write","isTargetStatusLogEntry","hash","duration","status","statusMessages","running","success","formatDuration","hrToSeconds","failed","skipped","aborted","queued","defaultMessage","summarize","logFile","logFilePath","path","dirname","resolve","fs","existsSync","mkdirSync","recursive","createWriteStream","Writable"],"mappings":"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"}
package/lib/index.js CHANGED
@@ -5,26 +5,26 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- AdoReporter: function() {
12
+ get AdoReporter () {
13
13
  return _AdoReporter.AdoReporter;
14
14
  },
15
- ChromeTraceEventsReporter: function() {
15
+ get ChromeTraceEventsReporter () {
16
16
  return _ChromeTraceEventsReporter.ChromeTraceEventsReporter;
17
17
  },
18
- JsonReporter: function() {
18
+ get JsonReporter () {
19
19
  return _JsonReporter.JsonReporter;
20
20
  },
21
- LogReporter: function() {
21
+ get LogReporter () {
22
22
  return _LogReporter.LogReporter;
23
23
  },
24
- ProgressReporter: function() {
24
+ get ProgressReporter () {
25
25
  return _ProgressReporter.ProgressReporter;
26
26
  },
27
- VerboseFileLogReporter: function() {
27
+ get VerboseFileLogReporter () {
28
28
  return _VerboseFileLogReporter.VerboseFileLogReporter;
29
29
  }
30
30
  });
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AdoReporter } from \"./AdoReporter.js\";\nexport { JsonReporter } from \"./JsonReporter.js\";\nexport { LogReporter } from \"./LogReporter.js\";\nexport { ChromeTraceEventsReporter } from \"./ChromeTraceEventsReporter.js\";\nexport { ProgressReporter } from \"./ProgressReporter.js\";\nexport { VerboseFileLogReporter } from \"./VerboseFileLogReporter.js\";\nexport type { TargetStatusEntry, TargetMessageEntry } from \"./types/TargetLogEntry.js\";\n"],"names":["AdoReporter","ChromeTraceEventsReporter","JsonReporter","LogReporter","ProgressReporter","VerboseFileLogReporter"],"mappings":";;;;;;;;;;;IAASA,WAAW;eAAXA,wBAAW;;IAGXC,yBAAyB;eAAzBA,oDAAyB;;IAFzBC,YAAY;eAAZA,0BAAY;;IACZC,WAAW;eAAXA,wBAAW;;IAEXC,gBAAgB;eAAhBA,kCAAgB;;IAChBC,sBAAsB;eAAtBA,8CAAsB;;;6BALH;8BACC;6BACD;2CACc;kCACT;wCACM"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { AdoReporter } from \"./AdoReporter.js\";\nexport { JsonReporter } from \"./JsonReporter.js\";\nexport { LogReporter } from \"./LogReporter.js\";\nexport { ChromeTraceEventsReporter } from \"./ChromeTraceEventsReporter.js\";\nexport { ProgressReporter } from \"./ProgressReporter.js\";\nexport { VerboseFileLogReporter } from \"./VerboseFileLogReporter.js\";\nexport type { TargetStatusEntry, TargetMessageEntry } from \"./types/TargetLogEntry.js\";\n"],"names":["AdoReporter","ChromeTraceEventsReporter","JsonReporter","LogReporter","ProgressReporter","VerboseFileLogReporter"],"mappings":";;;;;;;;;;;QAASA;eAAAA,wBAAW;;QAGXC;eAAAA,oDAAyB;;QAFzBC;eAAAA,0BAAY;;QACZC;eAAAA,wBAAW;;QAEXC;eAAAA,kCAAgB;;QAChBC;eAAAA,8CAAsB;;;6BALH;8BACC;6BACD;2CACc;kCACT;wCACM"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lage-run/reporters",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Log reporters for Lage",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,8 +19,8 @@
19
19
  "dependencies": {
20
20
  "@lage-run/format-hrtime": "^0.1.6",
21
21
  "@lage-run/logger": "^1.3.1",
22
- "@lage-run/scheduler-types": "^0.3.23",
23
- "@lage-run/target-graph": "^0.11.1",
22
+ "@lage-run/scheduler-types": "^0.3.25",
23
+ "@lage-run/target-graph": "^0.11.3",
24
24
  "@ms-cloudpack/task-reporter": "0.5.3",
25
25
  "ansi-regex": "5.0.1",
26
26
  "chalk": "4.1.2",