Skip to content

Commit 8f58f26

Browse files
committed
feat!: support factory for defineDirective
1 parent 0a14cf8 commit 8f58f26

File tree

10 files changed

+35
-22
lines changed

10 files changed

+35
-22
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -206,11 +206,11 @@ Taking the built-in directive as an example:
206206
```ts
207207
/** @see https://xregexp.com/ */
208208
import type { NamedGroupsArray } from 'xregexp'
209-
import { defineDirective } from 'unplugin-preprocessor-directives'
209+
import { defineDirective } from '../directive'
210210

211-
export default defineDirective({
212-
name: '#define',
211+
export default defineDirective<undefined>(() => ({
213212
nested: false,
213+
name: '#define',
214214
pattern: /.*?#(?<directive>(?:un)?def(?:ine)?)\s*(?<key>[\w]*)\s/gm,
215215
processor({ ctx }) {
216216
return (...args) => {
@@ -225,7 +225,7 @@ export default defineDirective({
225225
return ''
226226
}
227227
},
228-
})
228+
}))
229229
```
230230

231231
### `name: string`

README.zh-cn.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -207,11 +207,11 @@ class MyClass {
207207
```ts
208208
/** @see https://xregexp.com/ */
209209
import type { NamedGroupsArray } from 'xregexp'
210-
import { defineDirective } from 'unplugin-preprocessor-directives'
210+
import { defineDirective } from '../directive'
211211

212-
export default defineDirective({
213-
name: '#define',
212+
export default defineDirective<undefined>(() => ({
214213
nested: false,
214+
name: '#define',
215215
pattern: /.*?#(?<directive>(?:un)?def(?:ine)?)\s*(?<key>[\w]*)\s/gm,
216216
processor({ ctx }) {
217217
return (...args) => {
@@ -226,7 +226,7 @@ export default defineDirective({
226226
return ''
227227
}
228228
},
229-
})
229+
}))
230230
```
231231

232232
### `name: string`

src/core/context.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,17 @@ export class Context {
5656
'',
5757
)
5858

59+
if (directives.length === 0) {
60+
directives = [...builtinDirectives.map(v =>
61+
typeof v === 'function' ? v(this) : v,
62+
)]
63+
}
64+
5965
const [preDirectives, normalDirectives, postDirectives] = sortUserDirectives(directives.map(v =>
6066
typeof v === 'function' ? v(this) : v,
6167
))
6268

63-
this.directives = [...builtinDirectives.map(v =>
64-
typeof v === 'function' ? v(this) : v,
65-
), ...preDirectives, ...normalDirectives, ...postDirectives]
69+
this.directives = [...preDirectives, ...normalDirectives, ...postDirectives]
6670

6771
this.logger = createLogger(undefined, {
6872
prefix: 'unplugin-preprocessor-directives',

src/core/directive.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import type { Directive, FunctionDirective } from '../types'
1+
import type { DirectiveFactory } from '../types'
22

3-
export function defineDirective(
4-
directive: Directive | FunctionDirective,
3+
export function defineDirective<UserOptions>(
4+
factory: DirectiveFactory<UserOptions>,
55
) {
6-
return directive
6+
return (userOptions?: UserOptions) => {
7+
return factory(userOptions!)
8+
}
79
}

src/core/directives/define.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import type { NamedGroupsArray } from 'xregexp'
22
import { defineDirective } from '../directive'
33

4-
export default defineDirective({
4+
export default defineDirective<undefined>(() => ({
55
nested: false,
66
name: '#define',
77
pattern: /.*?#(?<directive>(?:un)?def(?:ine)?)\s*(?<key>[\w]*)\s/gm,
@@ -18,4 +18,4 @@ export default defineDirective({
1818
return ''
1919
}
2020
},
21-
})
21+
}))

src/core/directives/error.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { relative } from 'node:path'
22
import type { NamedGroupsArray } from 'xregexp'
33
import { defineDirective } from '../directive'
44

5-
export default defineDirective({
5+
export default defineDirective<undefined>(() => ({
66
nested: false,
77
name: '#error',
88
pattern: /.*?#(?<directive>(?:warning)|(?:error)|(?:info))\s*(?<message>[\u4E00-\u9FA5 \t\w]*).*?$/gm,
@@ -20,4 +20,4 @@ export default defineDirective({
2020
return ''
2121
}
2222
},
23-
})
23+
}))

src/core/directives/if.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ function resolveConditional(test: string, env = process.env) {
2525
}
2626
}
2727

28-
export default defineDirective({
28+
export default defineDirective<undefined>(() => ({
2929
name: '#if',
3030
nested: true,
3131
pattern: {
@@ -53,4 +53,4 @@ export default defineDirective({
5353
}
5454
return ''
5555
},
56-
})
56+
}))

src/core/directives/index.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,8 @@ import IfDirective from './if'
22
import DefineDirective from './define'
33
import ErrorDirective from './error'
44

5-
export const builtinDirectives = [DefineDirective, IfDirective, ErrorDirective]
5+
export { default as IfDirective } from './if'
6+
export { default as DefineDirective } from './define'
7+
export { default as ErrorDirective } from './error'
8+
9+
export const builtinDirectives = [DefineDirective(), IfDirective(), ErrorDirective()]

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from './types'
22
export * from './core/directive'
33
export { default } from './core/unplugin'
4+
export * from './core/directives'

src/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,5 @@ export interface Options {
6262
}
6363

6464
export interface UserOptions extends Partial<Options> { }
65+
66+
export type DirectiveFactory<UserOptions> = (options: UserOptions) => FunctionDirective | Directive

0 commit comments

Comments
 (0)