-
Notifications
You must be signed in to change notification settings - Fork 27
/
setup.ts
102 lines (94 loc) · 3.53 KB
/
setup.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import chalk from "chalk"
import { ValidCNSInputs } from "../create-next-stack-types"
import { capitalizeFirstLetter } from "../helpers/capitalize-first-letter"
import { getDiffString } from "../helpers/diff-string"
import { inDebugMode } from "../helpers/in-debug-mode"
import { time } from "../helpers/time"
import { logDebug, logInfo } from "../logging"
import { evalActive, evalShouldRun, Plugin } from "../plugin"
import { chakraUIPlugin } from "../plugins/chakra-ui/chakra-ui"
import { createNextStackPlugin } from "../plugins/create-next-stack/create-next-stack"
import { cssModulesPlugin } from "../plugins/css-modules/css-modules"
import { emotionPlugin } from "../plugins/emotion"
import { eslintPlugin } from "../plugins/eslint"
import { formattingPreCommitHookPlugin } from "../plugins/formatting-pre-commit-hook"
import { formikPlugin } from "../plugins/formik"
import { framerMotionPlugin } from "../plugins/framer-motion"
import { githubActionsPlugin } from "../plugins/github-actions"
import { mantinePlugin } from "../plugins/mantine/mantine"
import { materialUIPlugin } from "../plugins/material-ui/material-ui"
import { netlifyPlugin } from "../plugins/netlify"
import { nextPlugin } from "../plugins/next"
import { npmPlugin } from "../plugins/npm"
import { plausiblePlugin } from "../plugins/plausible"
import { pnpmPlugin } from "../plugins/pnpm"
import { prettierPlugin } from "../plugins/prettier"
import { reactPlugin } from "../plugins/react"
import { reactHookFormPlugin } from "../plugins/react-hook-form"
import { reactIconsPlugin } from "../plugins/react-icons"
import { reactQueryPlugin } from "../plugins/react-query"
import { sassPlugin } from "../plugins/sass/sass"
import { styledComponentsPlugin } from "../plugins/styled-components"
import { tailwindCSSPlugin } from "../plugins/tailwind-css"
import { typescriptPlugin } from "../plugins/typescript"
import { vercelPlugin } from "../plugins/vercel"
import { yarnPlugin } from "../plugins/yarn"
import { steps } from "../steps"
import { printFinalMessages } from "./print-final-messages"
export const plugins: Plugin[] = [
createNextStackPlugin,
nextPlugin,
reactPlugin,
typescriptPlugin,
emotionPlugin,
styledComponentsPlugin,
tailwindCSSPlugin,
cssModulesPlugin,
sassPlugin,
mantinePlugin,
chakraUIPlugin,
materialUIPlugin,
reactHookFormPlugin,
formikPlugin,
framerMotionPlugin,
eslintPlugin,
prettierPlugin,
formattingPreCommitHookPlugin,
pnpmPlugin,
yarnPlugin,
npmPlugin,
githubActionsPlugin,
reactIconsPlugin,
reactQueryPlugin,
plausiblePlugin,
vercelPlugin,
netlifyPlugin,
]
export const filterPlugins = (inputs: ValidCNSInputs): Plugin[] =>
plugins.filter((plugin) => evalActive(plugin.active, inputs))
export const performSetupSteps = async (
inputs: ValidCNSInputs
): Promise<void> => {
const allStepsDiff = await time(async () => {
for (const step of steps) {
const pluginActive = evalActive(step.plugin.active, inputs)
const stepShouldRun = await evalShouldRun(step.shouldRun, inputs)
if (!pluginActive || !stepShouldRun) {
continue
}
logInfo(`${capitalizeFirstLetter(step.description)}...`)
const diff = await time(async () => {
await step.run(inputs)
})
if (inDebugMode() && diff > 1000) {
logDebug(
chalk.yellow(`Step took ${getDiffString(diff)} (${step.description})`)
)
}
}
})
if (inDebugMode() && allStepsDiff > 1000) {
logDebug(chalk.yellow(`All steps took ${getDiffString(allStepsDiff)}`))
}
printFinalMessages(inputs)
}