Skip to content

Commit 5f53974

Browse files
committedJan 27, 2025··
feat!: require unocss plugin as a peer dep
1 parent cb0cfac commit 5f53974

24 files changed

+161
-180
lines changed
 

‎.vscode/settings.json

+2-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
{
22
"editor.formatOnSave": true,
3-
"exportall.config.folderListener": ["/src", "/src/configs"],
4-
"exportall.config.semis": false,
5-
"eslint.options": {
6-
"flags": ["unstable_ts_config"]
7-
}
3+
"exportall.config.folderListener": ["/src/configs"],
4+
"exportall.config.semis": false
85
}

‎package.json

+8-2
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,18 @@
3939
"prepublishOnly": "pnpm run build"
4040
},
4141
"peerDependencies": {
42+
"@unocss/eslint-plugin": ">=65.0.0",
4243
"eslint": "^9.5.0"
4344
},
45+
"peerDependenciesMeta": {
46+
"@unocss/eslint-plugin": {
47+
"optional": true
48+
}
49+
},
4450
"dependencies": {
4551
"@eslint-community/eslint-plugin-eslint-comments": "^4.4.1",
4652
"@eslint/js": "^9.19.0",
4753
"@eslint/markdown": "^6.2.2",
48-
"@unocss/eslint-plugin": "^65.4.3",
4954
"eslint-config-flat-gitignore": "^1.0.0",
5055
"eslint-config-prettier": "^10.0.1",
5156
"eslint-plugin-antfu": "^3.0.0",
@@ -57,7 +62,7 @@
5762
"eslint-plugin-perfectionist": "^4.7.0",
5863
"eslint-plugin-prettier": "^5.2.3",
5964
"eslint-plugin-regexp": "^2.7.0",
60-
"eslint-plugin-sxzz": "^0.1.0",
65+
"eslint-plugin-sxzz": "^0.2.0",
6166
"eslint-plugin-unicorn": "^56.0.1",
6267
"eslint-plugin-unused-imports": "^4.1.4",
6368
"eslint-plugin-vue": "^9.32.0",
@@ -74,6 +79,7 @@
7479
"@eslint/config-inspector": "^1.0.0",
7580
"@sxzz/prettier-config": "^2.1.0",
7681
"@types/node": "^22.10.10",
82+
"@unocss/eslint-plugin": "^65.4.3",
7783
"bumpp": "^10.0.1",
7884
"eslint": "^9.19.0",
7985
"eslint-typegen": "^1.0.0",

‎pnpm-lock.yaml

+8-8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎src/configs/command.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { configCommand } from '../plugins'
2-
import type { Linter } from 'eslint'
2+
import type { Config } from '../types'
33

4-
export const command: Linter.Config[] = [
4+
export const command = (): Config[] => [
55
{
66
...configCommand(),
77
name: 'sxzz/command',

‎src/configs/comments.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { configComments } from '../plugins'
2-
import type { Linter } from 'eslint'
2+
import type { Config } from '../types'
33

4-
export const comments: Linter.Config[] = [
4+
export const comments = (): Config[] => [
55
{
66
...configComments.recommended,
77
name: 'sxzz/comments/recommended',

‎src/configs/ignores.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { GLOB_EXCLUDE } from '../globs'
22
import { pluginIgnore } from '../plugins'
3-
import type { Linter } from 'eslint'
3+
import type { Config } from '../types'
44

5-
export const ignores: Linter.Config[] = [
5+
export const ignores = (): Config[] => [
66
{
77
ignores: GLOB_EXCLUDE,
88
name: 'sxzz/global-ignores',

‎src/configs/imports.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { pluginAntfu, pluginImport } from '../plugins'
2-
import type { Linter } from 'eslint'
2+
import type { Config } from '../types'
33

4-
export const imports: Linter.Config[] = [
4+
export const imports = (): Config[] => [
55
{
66
name: 'sxzz/imports',
77
plugins: {

‎src/configs/javascript.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import globals from 'globals'
2-
import { isInEditor } from '../env'
2+
import { isInEditorEnv } from '../env'
33
import { configJs, pluginSxzz, pluginUnusedImports } from '../plugins'
44
import type { Config } from '../types'
55

@@ -9,7 +9,7 @@ export const restrictedSyntaxJs: string[] = [
99
'WithStatement',
1010
]
1111

12-
export const javascript: Config[] = [
12+
export const javascript = (): Config[] => [
1313
{ ...configJs.configs.recommended, name: 'sxzz/js/recommended' },
1414
{
1515
languageOptions: {
@@ -80,7 +80,7 @@ export const javascript: Config[] = [
8080
'require-await': 'error',
8181
'sxzz/prefer-string-function': 'warn',
8282
'unicode-bom': ['error', 'never'],
83-
'unused-imports/no-unused-imports': isInEditor ? 'off' : 'error',
83+
'unused-imports/no-unused-imports': isInEditorEnv() ? 'off' : 'error',
8484
'unused-imports/no-unused-vars': [
8585
'error',
8686
{ args: 'after-used', ignoreRestSiblings: true },

‎src/configs/jsdoc.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { pluginJsdoc } from '../plugins'
2-
import type { Linter } from 'eslint'
2+
import type { Config } from '../types'
33

4-
export const jsdoc: Linter.Config[] = [
4+
export const jsdoc = (): Config[] => [
55
{
66
name: 'sxzz/jsdoc',
77
plugins: {

‎src/configs/jsonc.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { GLOB_JSON, GLOB_JSON5, GLOB_JSONC } from '../globs'
22
import { parserJsonc, pluginJsonc } from '../plugins'
3+
import type { Config } from '../types'
34
import type { Linter } from 'eslint'
45

5-
export const jsonc: Linter.Config[] = [
6+
export const jsonc = (): Config[] => [
67
{
78
files: [GLOB_JSON, GLOB_JSON5, GLOB_JSONC],
89
languageOptions: {

‎src/configs/markdown.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { GLOB_MARKDOWN, GLOB_SRC, GLOB_VUE } from '../globs'
22
import { pluginMarkdown } from '../plugins'
3-
import type { Linter } from 'eslint'
3+
import type { Config } from '../types'
44

5-
export const markdown: Linter.Config[] = [
6-
...pluginMarkdown.configs.processor.map((config: Linter.Config) => ({
5+
export const markdown = (): Config[] => [
6+
...pluginMarkdown.configs.processor.map((config: Config) => ({
77
...config,
88
name: `sxzz/${config.name || 'anonymous'}`,
99
})),

‎src/configs/node.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { pluginNode } from '../plugins'
2-
import type { Linter } from 'eslint'
2+
import type { Config } from '../types'
33

4-
export const node: Linter.Config[] = [
4+
export const node = (): Config[] => [
55
{
66
name: 'sxzz/node',
77
plugins: {

‎src/configs/prettier.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
import { configPrettier, pluginPrettier } from '../plugins'
2-
import type { Linter } from 'eslint'
1+
import {
2+
configPrettier,
3+
pluginPrettier,
4+
pluginPrettierRecommended,
5+
} from '../plugins'
6+
import type { Config } from '../types'
37

48
const prettierConflictRules = { ...configPrettier.rules }
59
delete prettierConflictRules['vue/html-self-closing']
610

7-
export const prettier: Linter.Config[] = [
11+
export const prettier = (): Config[] => [
812
{
913
name: 'sxzz/prettier',
1014
plugins: {
1115
prettier: pluginPrettier,
1216
},
1317
rules: {
1418
...prettierConflictRules,
15-
...pluginPrettier.configs.recommended.rules,
19+
...pluginPrettierRecommended.rules,
1620
'prettier/prettier': 'warn',
1721
},
1822
},

‎src/configs/regexp.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import { configs } from 'eslint-plugin-regexp'
2-
import type { Linter } from 'eslint'
2+
import type { Config } from '../types'
33

4-
export const regexp: Linter.Config[] = [
4+
export const regexp = (): Config[] => [
55
{
6-
...(configs['flat/recommended'] as Linter.Config),
6+
...(configs['flat/recommended'] as Config),
77
name: 'sxzz/regexp',
88
},
99
]

‎src/configs/sort.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { pluginPerfectionist } from '../plugins'
22

3-
import type { Linter } from 'eslint'
3+
import type { Config } from '../types'
44

5-
export const sortPackageJson: Linter.Config[] = [
5+
export const sortPackageJson = (): Config[] => [
66
{
77
files: ['**/package.json'],
88
name: 'sxzz/sort/package.json',
@@ -80,7 +80,7 @@ export const sortPackageJson: Linter.Config[] = [
8080
},
8181
]
8282

83-
export const sortTsconfig: Linter.Config[] = [
83+
export const sortTsconfig = (): Config[] => [
8484
{
8585
files: ['**/tsconfig.json', '**/tsconfig.*.json'],
8686
name: 'sxzz/sort/tsconfig',
@@ -205,7 +205,7 @@ export const sortTsconfig: Linter.Config[] = [
205205
},
206206
]
207207

208-
export const sortImports: Linter.Config[] = [
208+
export const sortImports = (): Config[] => [
209209
{
210210
name: 'sxzz/sort/imports',
211211
plugins: {

‎src/configs/special-cases.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { GLOB_MARKDOWN, GLOB_SRC, GLOB_SRC_EXT } from '../globs'
22
import { pluginImport } from '../plugins'
33
import type { Config } from '../types'
44

5-
export const specialCases: Config[] = [
5+
export const specialCases = (): Config[] => [
66
{
77
files: ['**/scripts/*', '**/cli.*'],
88
name: 'sxzz/special/cli',

‎src/configs/typescript.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { GLOB_JS, GLOB_TS, GLOB_TSX } from '../globs'
22
import { tseslint } from '../plugins'
33
import type { Rules } from '../typegen'
4+
import type { Config } from '../types'
45
import { restrictedSyntaxJs } from './javascript'
5-
import type { Linter } from 'eslint'
66

77
export const typescriptCore = tseslint.config({
88
extends: [...tseslint.configs.recommended],
@@ -52,9 +52,9 @@ export const typescriptCore = tseslint.config({
5252
'TSEnumDeclaration[const=true]',
5353
],
5454
} satisfies Rules,
55-
}) as Linter.Config[]
55+
}) as Config[]
5656

57-
export const typescript: Linter.Config[] = [
57+
export const typescript = (): Config[] => [
5858
...typescriptCore,
5959

6060
{

‎src/configs/unicorn.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { pluginUnicorn } from '../plugins'
22
import type { Config } from '../types'
33

4-
export const unicorn: Config[] = [
4+
export const unicorn = (): Config[] => [
55
{
66
name: 'sxzz/unicorn',
77
plugins: {

‎src/configs/unocss.ts

+10-8
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
import { pluginUnocss } from '../plugins'
2-
import type { Linter } from 'eslint'
1+
import type { Config } from '../types'
32

4-
export const unocss: Linter.Config[] = [
5-
{
6-
...(pluginUnocss.configs.flat as any as Linter.Config),
7-
name: 'sxzz/unocss',
8-
},
9-
]
3+
export const unocss = async (): Promise<Config[]> => {
4+
const { default: unocss } = await import('@unocss/eslint-plugin')
5+
return [
6+
{
7+
...(unocss.configs.flat as any as Config),
8+
name: 'sxzz/unocss',
9+
},
10+
]
11+
}

‎src/configs/vue.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import process from 'node:process'
22
import { getPackageInfoSync } from 'local-pkg'
33
import { GLOB_VUE } from '../globs'
44
import { parserVue, pluginVue, tseslint } from '../plugins'
5+
import type { Rules } from '../typegen'
6+
import type { Config } from '../types'
57
import { typescriptCore } from './typescript'
6-
import type { Linter } from 'eslint'
8+
import type { ESLint } from 'eslint'
79

810
export function getVueVersion(): number {
911
const pkg = getPackageInfoSync('vue', { paths: [process.cwd()] })
@@ -18,7 +20,7 @@ export function getVueVersion(): number {
1820
}
1921
const isVue3 = getVueVersion() === 3
2022

21-
export const reactivityTransform: Linter.Config[] = [
23+
export const reactivityTransform = (): Config[] => [
2224
{
2325
languageOptions: {
2426
globals: {
@@ -41,7 +43,7 @@ export const reactivityTransform: Linter.Config[] = [
4143
},
4244
]
4345

44-
const vueCustomRules: Linter.RulesRecord = {
46+
const vueCustomRules: Rules = {
4547
'vue/block-order': ['error', { order: ['script', 'template', 'style'] }],
4648
'vue/custom-event-name-casing': ['error', 'camelCase'],
4749
'vue/eqeqeq': ['error', 'smart'],
@@ -82,14 +84,14 @@ const vueCustomRules: Linter.RulesRecord = {
8284
'vue/require-prop-types': 'off',
8385
}
8486

85-
const vue3Rules: Linter.RulesRecord = {
87+
const vue3Rules: Rules = {
8688
...pluginVue.configs.base.rules,
8789
...pluginVue.configs['vue3-essential'].rules,
8890
...pluginVue.configs['vue3-strongly-recommended'].rules,
8991
...pluginVue.configs['vue3-recommended'].rules,
9092
}
9193

92-
const vue2Rules: Linter.RulesRecord = {
94+
const vue2Rules: Rules = {
9395
...pluginVue.configs.base.rules,
9496
...pluginVue.configs.essential.rules,
9597
...pluginVue.configs['strongly-recommended'].rules,
@@ -99,7 +101,7 @@ const vue2Rules: Linter.RulesRecord = {
99101
delete vue2Rules['vue/component-tags-order']
100102
delete vue3Rules['vue/component-tags-order']
101103

102-
const vueTs: Linter.Config[] = typescriptCore
104+
const vueTs: Config[] = typescriptCore
103105
.filter((config) => config.name !== 'typescript-eslint/base')
104106
.map((config) => {
105107
return {
@@ -109,7 +111,7 @@ const vueTs: Linter.Config[] = typescriptCore
109111
}
110112
})
111113

112-
export const vue: Linter.Config[] = [
114+
export const vue = (): Config[] => [
113115
...vueTs,
114116
{
115117
files: [GLOB_VUE],
@@ -126,7 +128,7 @@ export const vue: Linter.Config[] = [
126128
},
127129
name: 'sxzz/vue',
128130
plugins: {
129-
'@typescript-eslint': tseslint.plugin as any,
131+
'@typescript-eslint': tseslint.plugin as ESLint.Plugin,
130132
vue: pluginVue,
131133
},
132134
processor: pluginVue.processors['.vue'],
@@ -135,5 +137,5 @@ export const vue: Linter.Config[] = [
135137
...vueCustomRules,
136138
},
137139
},
138-
...reactivityTransform,
140+
...reactivityTransform(),
139141
]

‎src/configs/yml.ts

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { GLOB_YAML } from '../globs'
22
import { parserYml, pluginYml } from '../plugins'
3-
import type { Linter } from 'eslint'
3+
import type { Rules } from '../typegen'
4+
import type { Config } from '../types'
45

5-
export const yml: Linter.Config[] = [
6+
export const yml = (): Config[] => [
67
{
78
files: [GLOB_YAML],
89
languageOptions: {
@@ -13,8 +14,8 @@ export const yml: Linter.Config[] = [
1314
yml: pluginYml as any,
1415
},
1516
rules: {
16-
...(pluginYml.configs.standard.rules as Linter.RulesRecord),
17-
...(pluginYml.configs.prettier.rules as Linter.RulesRecord),
17+
...(pluginYml.configs.standard.rules as Rules),
18+
...(pluginYml.configs.prettier.rules as Rules),
1819
'yml/no-empty-mapping-value': 'off',
1920
},
2021
},

‎src/env.ts

+20-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
import process from 'node:process'
22
import { isPackageExists } from 'local-pkg'
33

4-
export const isInEditor: boolean = !!(
5-
(process.env.VSCODE_PID ||
6-
process.env.VSCODE_CWD ||
7-
process.env.JETBRAINS_IDE ||
8-
process.env.VIM) &&
9-
!process.env.CI
10-
)
114
export const hasTypeScript: boolean = isPackageExists('typescript')
125
export const hasVue: boolean =
136
isPackageExists('vue') ||
@@ -18,3 +11,23 @@ export const hasUnocss: boolean =
1811
isPackageExists('unocss') ||
1912
isPackageExists('@unocss/webpack') ||
2013
isPackageExists('@unocss/nuxt')
14+
15+
export function isInEditorEnv(): boolean {
16+
if (process.env.CI) return false
17+
if (isInGitHooksOrLintStaged()) return false
18+
return !!(
19+
process.env.VSCODE_PID ||
20+
process.env.VSCODE_CWD ||
21+
process.env.JETBRAINS_IDE ||
22+
process.env.VIM ||
23+
process.env.NVIM
24+
)
25+
}
26+
27+
export function isInGitHooksOrLintStaged(): boolean {
28+
return !!(
29+
process.env.GIT_PARAMS ||
30+
process.env.VSCODE_GIT_COMMAND ||
31+
process.env.npm_lifecycle_script?.startsWith('lint-staged')
32+
)
33+
}

‎src/plugins.ts

+18-62
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,28 @@
1-
/* eslint-disable import/first */
21
// @ts-nocheck
32

4-
export type InteropDefault<T> = T extends { default: infer U } ? U : T
5-
6-
/* #__NO_SIDE_EFFECTS__ */
7-
function interopDefault<T>(m: T): InteropDefault<T> {
8-
return 'default' in m ? interopDefault(m.default) : m
9-
}
10-
11-
import _configJs from '@eslint/js'
12-
export const configJs: any = interopDefault(_configJs)
13-
14-
import * as _pluginAntfu from 'eslint-plugin-antfu'
15-
export const pluginAntfu: typeof import('eslint-plugin-antfu').default =
16-
interopDefault(_pluginAntfu)
17-
18-
import * as _pluginSxzz from 'eslint-plugin-sxzz'
19-
export const pluginSxzz: typeof import('eslint-plugin-sxzz').default =
20-
interopDefault(_pluginSxzz)
21-
22-
export { default as configComments } from '@eslint-community/eslint-plugin-eslint-comments/configs'
23-
24-
import * as _pluginMarkdown from '@eslint/markdown'
25-
export const pluginMarkdown: any = interopDefault(_pluginMarkdown)
26-
27-
import tseslint from 'typescript-eslint'
28-
export { tseslint }
29-
30-
import * as _pluginUnicorn from 'eslint-plugin-unicorn'
31-
export const pluginUnicorn: any = interopDefault(_pluginUnicorn)
32-
33-
import * as _pluginVue from 'eslint-plugin-vue'
34-
export const pluginVue: any = interopDefault(_pluginVue)
35-
36-
import * as _pluginNode from 'eslint-plugin-n'
37-
export const pluginNode: typeof import('eslint-plugin-n') =
38-
interopDefault(_pluginNode)
39-
40-
import * as _pluginPerfectionist from 'eslint-plugin-perfectionist'
41-
export const pluginPerfectionist: any = interopDefault(_pluginPerfectionist)
42-
43-
import * as _pluginUnocss from '@unocss/eslint-plugin'
44-
export const pluginUnocss: typeof import('@unocss/eslint-plugin').default =
45-
interopDefault(_pluginUnocss)
46-
47-
import * as _pluginPrettier from 'eslint-plugin-prettier'
48-
export const pluginPrettier: any = interopDefault(_pluginPrettier)
49-
50-
import * as _configPrettier from 'eslint-config-prettier'
51-
export const configPrettier: any = interopDefault(_configPrettier)
52-
53-
import * as _pluginUnusedImports from 'eslint-plugin-unused-imports'
54-
export const pluginUnusedImports: any = interopDefault(_pluginUnusedImports)
55-
56-
import * as _pluginJsdoc from 'eslint-plugin-jsdoc'
57-
export const pluginJsdoc: any = interopDefault(_pluginJsdoc)
58-
59-
import * as _pluginIgnore from 'eslint-config-flat-gitignore'
60-
export const pluginIgnore: any = interopDefault(_pluginIgnore)
3+
export { default as pluginAntfu } from 'eslint-plugin-antfu'
4+
export { default as pluginSxzz } from 'eslint-plugin-sxzz'
5+
export { default as pluginMarkdown } from '@eslint/markdown'
6+
export { default as tseslint } from 'typescript-eslint'
7+
export { default as pluginUnicorn } from 'eslint-plugin-unicorn'
8+
export { default as pluginVue } from 'eslint-plugin-vue'
9+
export { default as pluginNode } from 'eslint-plugin-n'
10+
export { default as pluginPerfectionist } from 'eslint-plugin-perfectionist'
11+
export { default as pluginPrettier } from 'eslint-plugin-prettier'
12+
export { default as pluginPrettierRecommended } from 'eslint-plugin-prettier/recommended'
13+
export { default as pluginUnusedImports } from 'eslint-plugin-unused-imports'
14+
export { default as pluginJsdoc } from 'eslint-plugin-jsdoc'
15+
export { default as pluginIgnore } from 'eslint-config-flat-gitignore'
6116

6217
export * as pluginImport from 'eslint-plugin-import-x'
6318
export * as pluginJsonc from 'eslint-plugin-jsonc'
6419
export * as pluginYml from 'eslint-plugin-yml'
6520

21+
export { default as configJs } from '@eslint/js'
22+
export { default as configComments } from '@eslint-community/eslint-plugin-eslint-comments/configs'
23+
export { default as configPrettier } from 'eslint-config-prettier'
24+
export { default as configCommand } from 'eslint-plugin-command/config'
25+
6626
export * as parserVue from 'vue-eslint-parser'
6727
export * as parserYml from 'yaml-eslint-parser'
6828
export * as parserJsonc from 'jsonc-eslint-parser'
69-
70-
import _configCommand from 'eslint-plugin-command/config'
71-
export const configCommand: typeof _configCommand =
72-
interopDefault(_configCommand)

‎src/presets.ts

+39-40
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,33 @@ import { hasUnocss, hasVue } from './env'
2424
import type { Config } from './types'
2525

2626
/** Ignore common files and include javascript support */
27-
export const presetJavaScript: Config[] = [
28-
...ignores,
29-
...javascript,
30-
...comments,
31-
...imports,
32-
...unicorn,
33-
...node,
34-
...jsdoc,
35-
...regexp,
27+
export const presetJavaScript = (): Config[] => [
28+
...ignores(),
29+
...javascript(),
30+
...comments(),
31+
...imports(),
32+
...unicorn(),
33+
...node(),
34+
...jsdoc(),
35+
...regexp(),
3636
]
3737
/** Includes basic json(c) file support and sorting json keys */
38-
export const presetJsonc: Config[] = [
39-
...jsonc,
40-
...sortPackageJson,
41-
...sortTsconfig,
38+
export const presetJsonc = (): Config[] => [
39+
...jsonc(),
40+
...sortPackageJson(),
41+
...sortTsconfig(),
4242
]
4343
/** Includes markdown, yaml + `presetJsonc` support */
44-
export const presetLangsExtensions: Config[] = [
45-
...markdown,
46-
...yml,
47-
...presetJsonc,
44+
export const presetLangsExtensions = (): Config[] => [
45+
...markdown(),
46+
...yml(),
47+
...presetJsonc(),
4848
]
4949
/** Includes `presetJavaScript` and typescript support */
50-
export const presetBasic: Config[] = [
51-
...presetJavaScript,
52-
...typescript,
53-
...sortImports,
50+
export const presetBasic = (): Config[] => [
51+
...presetJavaScript(),
52+
...typescript(),
53+
...sortImports(),
5454
]
5555
/**
5656
* Includes
@@ -60,17 +60,16 @@ export const presetBasic: Config[] = [
6060
* - UnoCSS support (`uno.config.ts` is required)
6161
* - Prettier support
6262
*/
63-
export const presetAll: Config[] = [
64-
...presetBasic,
65-
...presetLangsExtensions,
66-
...vue,
67-
...unocss,
68-
...prettier,
63+
export const presetAll = async (): Promise<Config[]> => [
64+
...presetBasic(),
65+
...presetLangsExtensions(),
66+
...vue(),
67+
...(await unocss()),
68+
...prettier(),
6969
]
70-
export { presetAll as all, presetBasic as basic }
7170

72-
/** `sxzz`'s preset. */
73-
export function sxzz(
71+
/** `@sxzz`'s preset. */
72+
export async function sxzz(
7473
config: Config | Config[] = [],
7574
{
7675
command: enableCommand = true,
@@ -79,37 +78,37 @@ export function sxzz(
7978
unocss: enableUnocss = hasUnocss,
8079
vue: enableVue = hasVue,
8180
}: Partial<{
82-
/** Vue support. Auto-enable. */
81+
/** Vue support. Auto-enable if detected. */
8382
vue: boolean
8483
/** Prettier support. Default: true */
8584
prettier: boolean
8685
/** markdown support. Default: true */
8786
markdown: boolean
88-
/** UnoCSS support. Auto-enable. */
87+
/** UnoCSS support. Auto-enable if detected. */
8988
unocss: boolean
9089
sortKeys: boolean
9190
command: boolean
9291
}> = {},
93-
): Config[] {
94-
const configs: Config[] = [...presetBasic, ...yml, ...presetJsonc]
92+
): Promise<Config[]> {
93+
const configs: Config[] = [...presetBasic(), ...yml(), ...presetJsonc()]
9594
if (enableVue) {
96-
configs.push(...vue)
95+
configs.push(...vue())
9796
}
9897
if (enableMarkdown) {
99-
configs.push(...markdown)
98+
configs.push(...markdown())
10099
}
101100
if (enableUnocss) {
102-
configs.push(...unocss)
101+
configs.push(...(await unocss()))
103102
}
104103
if (enablePrettier) {
105-
configs.push(...prettier)
104+
configs.push(...prettier())
106105
}
107106
if (enableCommand) {
108-
configs.push(...command)
107+
configs.push(...command())
109108
}
110109
if (Object.keys(config).length > 0) {
111110
configs.push(...(Array.isArray(config) ? config : [config]))
112111
}
113-
configs.push(...specialCases)
112+
configs.push(...specialCases())
114113
return configs
115114
}

0 commit comments

Comments
 (0)
Please sign in to comment.