Skip to content
This repository was archived by the owner on Jan 18, 2022. It is now read-only.

Commit 8ae8568

Browse files
committed
feat: Combine customBlocks inclusion/exclusion option
1 parent 5c1dffb commit 8ae8568

File tree

1 file changed

+23
-20
lines changed

1 file changed

+23
-20
lines changed

src/index.ts

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -57,23 +57,14 @@ export interface VuePluginOptions {
5757
[key: string]: string
5858
}
5959
/**
60-
* Exclude customBlocks for final build.
61-
* @default `['*']`
60+
* Exclude/Include customBlocks for final build.
61+
* @default `['!*']`
6262
* @example
6363
* ```js
64-
* VuePlugin({ blackListCustomBlocks: ['markdown', 'test'] })
64+
* VuePlugin({ customBlocks: ['markdown', '!test'] })
6565
* ```
6666
*/
67-
blackListCustomBlocks?: string[]
68-
/**
69-
* Include customBlocks for final build.
70-
* @default `[]`
71-
* @example
72-
* ```js
73-
* VuePlugin({ blackListCustomBlocks: ['markdown', 'test'] })
74-
* ```
75-
*/
76-
whiteListCustomBlocks?: string[]
67+
customBlocks?: string[] | (() => boolean)
7768
/**
7869
* Inject CSS in JavaScript.
7970
* @default `true`
@@ -152,24 +143,20 @@ export default function vue(opts: VuePluginOptions = {}): Plugin {
152143
}
153144

154145
const shouldExtractCss = opts.css === false
155-
const blacklisted = new Set(opts.blackListCustomBlocks || ['*'])
156-
const whitelisted = new Set(opts.whiteListCustomBlocks || [])
157146

158-
const isAllowed = (customBlockType: string) =>
159-
(!blacklisted.has('*') || !blacklisted.has(customBlockType)) &&
160-
(whitelisted.has('*') || whitelisted.has(customBlockType))
147+
const isAllowed = createCustomBlockFilter(opts.customBlocks)
161148

162149
const beforeAssemble =
163150
opts.beforeAssemble ||
164151
((d: DescriptorCompileResult): DescriptorCompileResult => d)
165152

166153
const exposeFilename =
167154
typeof opts.exposeFilename === 'boolean' ? opts.exposeFilename : false
155+
168156
delete opts.beforeAssemble
169157
delete opts.css
170158
delete opts.exposeFilename
171-
delete opts.blackListCustomBlocks
172-
delete opts.whiteListCustomBlocks
159+
delete opts.customBlocks
173160
delete opts.defaultLang
174161
delete opts.include
175162
delete opts.exclude
@@ -382,3 +369,19 @@ export default function vue(opts: VuePluginOptions = {}): Plugin {
382369
}
383370
}
384371
}
372+
373+
function createCustomBlockFilter(
374+
customBlocks?: string[] | ((tag: string) => boolean)
375+
): (tag: string) => boolean {
376+
if (typeof customBlocks === 'function') return customBlocks
377+
if (!Array.isArray(customBlocks)) return () => false
378+
379+
const allowed = new Set(customBlocks.filter(tag => !tag.startsWith('!')))
380+
const notAllowed = new Set(
381+
customBlocks.filter(tag => tag.startsWith('!')).map(tag => tag.substr(1))
382+
)
383+
384+
return tag =>
385+
(allowed.has('*') || allowed.has(tag)) &&
386+
!(notAllowed.has('*') || notAllowed.has(tag))
387+
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy