Skip to content

Commit

Permalink
feat: add enforce props for directive
Browse files Browse the repository at this point in the history
  • Loading branch information
KeJunMao committed Sep 18, 2023
1 parent a6ba548 commit 85818e4
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 9 deletions.
27 changes: 25 additions & 2 deletions src/core/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,25 @@ export interface replaceOptions {
id: string
directive: Directive
}
export function sortUserDirectives(
directives: Directive[],
): [Directive[], Directive[], Directive[]] {
const preDirectives: Directive[] = []
const postDirectives: Directive[] = []
const normalDirectives: Directive[] = []

if (directives) {
directives.forEach((p) => {
if (p.enforce === 'pre')
preDirectives.push(p)
else if (p.enforce === 'post')
postDirectives.push(p)
else normalDirectives.push(p)
})
}

return [preDirectives, normalDirectives, postDirectives]
}

export class Context {
cwd: string
Expand All @@ -36,9 +55,13 @@ export class Context {
'',
)

this.directives = [...directives, ...builtinDirectives].map(v =>
const [preDirectives, normalDirectives, postDirectives] = sortUserDirectives(directives.map(v =>
typeof v === 'function' ? v(this) : v,
)
))

this.directives = [...builtinDirectives.map(v =>
typeof v === 'function' ? v(this) : v,
), ...preDirectives, ...normalDirectives, ...postDirectives]

this.logger = createLogger(undefined, {
prefix: 'unplugin-preprocessor-directives',
Expand Down
4 changes: 2 additions & 2 deletions src/core/directive.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import type { Directive, DirectiveContext } from '../types'
import type { Directive, FunctionDirective } from '../types'

export function defineDirective(
directive: Directive | ((ctx: DirectiveContext) => Directive),
directive: Directive | FunctionDirective,
) {
return directive
}
10 changes: 5 additions & 5 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,8 @@ export interface MatchGroup {
right: RegExpExecArray | null
}

interface _Directive {
interface BaseDirective {
name: string
// TODO
enforce?: 'pre' | 'post'
nested?: boolean
include?: FilterPattern
Expand All @@ -34,7 +33,7 @@ export interface RecursiveProcessorOptions extends _ProcessorOptions {
replace: (code: string) => string
}

export interface RecursiveDirective extends _Directive {
export interface RecursiveDirective extends BaseDirective {
nested: true
pattern: {
start: string | RegExp
Expand All @@ -43,20 +42,21 @@ export interface RecursiveDirective extends _Directive {
processor(options: RecursiveProcessorOptions): string
}

export interface NormalDirective extends _Directive {
export interface NormalDirective extends BaseDirective {
nested?: false
pattern: string | RegExp
processor(options: NormalProcessorOptions): ReplacementValue
}

export type Directive = RecursiveDirective | NormalDirective
export type FunctionDirective = ((ctx: DirectiveContext) => Directive)
export type Plugin = Directive

export type DirectiveContext = Context

export interface Options {
cwd: string
directives: (Directive | ((ctx: DirectiveContext) => Directive))[]
directives: Directive[] | FunctionDirective[]
include: FilterPattern
exclude: FilterPattern
}
Expand Down

0 comments on commit 85818e4

Please sign in to comment.