Skip to content

Commit 342d835

Browse files
authored
Ts migration/convert yurnalist logger (gatsbyjs#24224)
* chore(gatsby-cli): Convert yurnalist logger to TypeScript * chore(gatsby-cli): Convert yurnalist logger to TypeScript * chore(gatsby-cli): Convert yurnalist logger to TypeScript * fix lint error * support tsx * fix tsx support * fix build process in cli
1 parent 97a3d0c commit 342d835

File tree

6 files changed

+155
-137
lines changed

6 files changed

+155
-137
lines changed

Diff for: jest-transformer.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module.exports = require(`babel-jest`).createTransformer({
44
overrides: [
55
...(babelPreset.overrides || []),
66
{
7-
test: `**/*.ts`,
7+
test: [`**/*.ts`, `**/*.tsx`],
88
plugins: [[`@babel/plugin-transform-typescript`, { isTSX: true }]],
99
},
1010
],

Diff for: packages/gatsby-cli/src/reporter/loggers/ink/index.tsx

+7-5
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@ const ConnectedCLI: React.FC = (): React.ReactElement => {
1212
return <CLI showStatusBar={Boolean(showStatusBar)} logs={state.logs} />
1313
}
1414

15-
render(
16-
<StoreStateProvider>
17-
<ConnectedCLI />
18-
</StoreStateProvider>
19-
)
15+
export function initializeINKLogger(): void {
16+
render(
17+
<StoreStateProvider>
18+
<ConnectedCLI />
19+
</StoreStateProvider>
20+
)
21+
}

Diff for: packages/gatsby-cli/src/reporter/loggers/ipc/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ const sanitizeAction = (action: ActionsUnion): ActionsUnion => {
2828
return copiedAction
2929
}
3030

31-
export const ipcLogger = (): void => {
31+
export const initializeIPCLogger = (): void => {
3232
onLogAction((action: ActionsUnion) => {
3333
if (!process.send) return
3434

Diff for: packages/gatsby-cli/src/reporter/loggers/yurnalist/index.js

-125
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
import { onLogAction } from "../../redux"
2+
import {
3+
Actions,
4+
LogLevels,
5+
ActivityLogLevels,
6+
ActivityTypes,
7+
} from "../../constants"
8+
9+
import { createReporter } from "yurnalist"
10+
import ProgressBar from "progress"
11+
import chalk from "chalk"
12+
import { IUpdateActivity } from "../../redux/types"
13+
14+
interface IYurnalistActivities {
15+
[activityId: string]: {
16+
text: string | undefined
17+
statusText: string | undefined
18+
update(payload: IUpdateActivity["payload"]): void
19+
end(): void
20+
}
21+
}
22+
23+
export function initializeYurnalistLogger(): void {
24+
const activities: IYurnalistActivities = {}
25+
const yurnalist = createReporter({ emoji: true, verbose: true })
26+
27+
const levelToYurnalist = {
28+
[LogLevels.Log]: yurnalist.log.bind(yurnalist),
29+
[LogLevels.Warning]: yurnalist.warn.bind(yurnalist),
30+
[LogLevels.Error]: yurnalist.error.bind(yurnalist),
31+
[LogLevels.Info]: yurnalist.info.bind(yurnalist),
32+
[LogLevels.Success]: yurnalist.success.bind(yurnalist),
33+
[ActivityLogLevels.Success]: yurnalist.success.bind(yurnalist),
34+
[ActivityLogLevels.Failed]: (text: string): void => {
35+
yurnalist.log(`${chalk.red(`failed`)} ${text}`)
36+
},
37+
[ActivityLogLevels.Interrupted]: (text: string): void => {
38+
yurnalist.log(`${chalk.gray(`not finished`)} ${text}`)
39+
},
40+
}
41+
42+
onLogAction(action => {
43+
switch (action.type) {
44+
case Actions.Log: {
45+
const yurnalistMethod = levelToYurnalist[action.payload.level]
46+
if (!yurnalistMethod) {
47+
process.stdout.write(`NO "${action.payload.level}" method\n`)
48+
} else {
49+
let message = action.payload.text
50+
if (action.payload.duration) {
51+
message += ` - ${action.payload.duration.toFixed(3)}s`
52+
}
53+
if (action.payload.statusText) {
54+
message += ` - ${action.payload.statusText}`
55+
}
56+
yurnalistMethod(message)
57+
}
58+
break
59+
}
60+
case Actions.StartActivity: {
61+
if (action.payload.type === ActivityTypes.Spinner) {
62+
const spinner = yurnalist.activity()
63+
spinner.tick(action.payload.text)
64+
65+
const activity = {
66+
text: action.payload.text,
67+
statusText: action.payload.statusText,
68+
update(payload: any): void {
69+
// TODO: I'm not convinced that this is ever called with a text property.
70+
// From searching the codebase it appears that we do not ever assign a text
71+
// property during the IUpdateActivity action.
72+
if (payload.text) {
73+
activity.text = payload.text
74+
}
75+
if (payload.statusText) {
76+
activity.statusText = payload.statusText
77+
}
78+
79+
let message = activity.text
80+
if (activity.statusText) {
81+
message += ` - ${activity.statusText}`
82+
}
83+
84+
message += ` id:"${action.payload.id}"`
85+
86+
spinner.tick(message)
87+
},
88+
end(): void {
89+
spinner.end()
90+
},
91+
}
92+
activities[action.payload.id] = activity
93+
} else if (action.payload.type === ActivityTypes.Progress) {
94+
const bar = new ProgressBar(
95+
` [:bar] :current/:total :elapsed s :percent ${action.payload.text}`,
96+
{
97+
total: action.payload.total,
98+
curr: action.payload.current,
99+
width: 30,
100+
clear: true,
101+
}
102+
)
103+
104+
activities[action.payload.id] = {
105+
text: undefined,
106+
statusText: undefined,
107+
update(payload): void {
108+
if (payload.total) {
109+
bar.total = payload.total
110+
}
111+
if (payload.current) {
112+
bar.curr = payload.current
113+
}
114+
115+
bar.tick(0)
116+
},
117+
end(): void {},
118+
}
119+
}
120+
break
121+
}
122+
case Actions.UpdateActivity: {
123+
const activity = activities[action.payload.id]
124+
if (activity) {
125+
activity.update(action.payload)
126+
}
127+
break
128+
}
129+
case Actions.EndActivity: {
130+
const activity = activities[action.payload.id]
131+
if (activity) {
132+
activity.end()
133+
delete activities[action.payload.id]
134+
}
135+
}
136+
}
137+
})
138+
}

Diff for: packages/gatsby-cli/src/reporter/start-logger.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
*/
44
import semver from "semver"
55
import { isCI } from "gatsby-core-utils"
6-
import { ipcLogger } from "./loggers/ipc"
6+
import { initializeIPCLogger } from "./loggers/ipc"
7+
import { initializeJSONLogger } from "./loggers/json"
8+
import { initializeYurnalistLogger } from "./loggers/yurnalist"
9+
import { initializeINKLogger } from "./loggers/ink"
710

811
export const startLogger = (): void => {
912
let inkExists = false
@@ -28,14 +31,14 @@ export const startLogger = (): void => {
2831
if (process.send) {
2932
// process.env.FORCE_COLOR = `0`
3033

31-
ipcLogger()
34+
initializeIPCLogger()
3235
}
3336

3437
if (process.env.GATSBY_LOGGER.includes(`json`)) {
35-
require(`./loggers/json`)
38+
initializeJSONLogger()
3639
} else if (process.env.GATSBY_LOGGER.includes(`yurnalist`)) {
37-
require(`./loggers/yurnalist`)
40+
initializeYurnalistLogger()
3841
} else {
39-
require(`./loggers/ink`)
42+
initializeINKLogger()
4043
}
4144
}

0 commit comments

Comments
 (0)