1+ import * as chokidar from 'chokidar'
12import type { Plugin } from '@vuepress/core'
2- import { fs } from '@vuepress/utils'
3+ import { preparePaletteFile } from './preparePaletteFile'
4+ import { prepareStyleFile } from './prepareStyleFile'
5+ import { presetOptions } from './presetOptions'
36
47/**
58 * Options of @vuepress/plugin-palette
@@ -36,43 +39,6 @@ export interface PalettePluginOptions {
3639 importCode ?: ( filePath : string ) => string
3740}
3841
39- /**
40- * Default options for different palette preset
41- */
42- export const presetOptions : Record <
43- Required < PalettePluginOptions > [ 'preset' ] ,
44- Omit < Required < PalettePluginOptions > , 'preset' >
45- > = {
46- css : {
47- userPaletteFile : '.vuepress/styles/palette.css' ,
48- tempPaletteFile : 'styles/palette.css' ,
49- userStyleFile : '.vuepress/styles/index.css' ,
50- tempStyleFile : 'styles/index.css' ,
51- importCode : ( filePath ) => `@import '${ filePath } ';\n` ,
52- } ,
53- sass : {
54- userPaletteFile : '.vuepress/styles/palette.scss' ,
55- tempPaletteFile : 'styles/palette.scss' ,
56- userStyleFile : '.vuepress/styles/index.scss' ,
57- tempStyleFile : 'styles/index.scss' ,
58- importCode : ( filePath ) => `@forward '${ filePath } ';\n` ,
59- } ,
60- less : {
61- userPaletteFile : '.vuepress/styles/palette.less' ,
62- tempPaletteFile : 'styles/palette.less' ,
63- userStyleFile : '.vuepress/styles/index.less' ,
64- tempStyleFile : 'styles/index.less' ,
65- importCode : ( filePath ) => `@import '${ filePath } ';\n` ,
66- } ,
67- stylus : {
68- userPaletteFile : '.vuepress/styles/palette.styl' ,
69- tempPaletteFile : 'styles/palette.styl' ,
70- userStyleFile : '.vuepress/styles/index.styl' ,
71- tempStyleFile : 'styles/index.styl' ,
72- importCode : ( filePath ) => `@require '${ filePath } ';\n` ,
73- } ,
74- }
75-
7642export const palettePlugin : Plugin < PalettePluginOptions > = (
7743 {
7844 preset = 'css' ,
@@ -83,34 +49,69 @@ export const palettePlugin: Plugin<PalettePluginOptions> = (
8349 importCode = presetOptions [ preset ] . importCode ,
8450 } ,
8551 app
86- ) => {
87- const userPalette = app . dir . source ( userPaletteFile )
88- const userStyle = app . dir . source ( userStyleFile )
89-
90- return {
91- name : '@vuepress/plugin-palette' ,
92-
93- alias : {
94- '@vuepress/plugin-palette/palette' : app . dir . temp ( tempPaletteFile ) ,
95- '@vuepress/plugin-palette/style' : app . dir . temp ( tempStyleFile ) ,
96- } ,
52+ ) => ( {
53+ name : '@vuepress/plugin-palette' ,
9754
98- onPrepared : async ( ) => {
99- let paletteContent = ''
100- let styleContent = ''
55+ alias : {
56+ '@vuepress/plugin-palette/palette' : app . dir . temp ( tempPaletteFile ) ,
57+ '@vuepress/plugin-palette/style' : app . dir . temp ( tempStyleFile ) ,
58+ } ,
10159
102- if ( await fs . pathExists ( userPalette ) ) {
103- paletteContent += importCode ( userPalette )
104- }
60+ onPrepared : ( ) =>
61+ Promise . all ( [
62+ preparePaletteFile ( app , {
63+ userPaletteFile,
64+ tempPaletteFile,
65+ importCode,
66+ } ) ,
67+ prepareStyleFile ( app , {
68+ userStyleFile,
69+ tempStyleFile,
70+ importCode,
71+ } ) ,
72+ ] ) ,
10573
106- if ( await fs . pathExists ( userStyle ) ) {
107- styleContent += importCode ( userStyle )
108- }
74+ onWatched : ( app , watchers ) => {
75+ const paletteWatcher = chokidar . watch ( userPaletteFile , {
76+ cwd : app . dir . source ( ) ,
77+ ignoreInitial : true ,
78+ } )
79+ paletteWatcher . on ( 'add' , ( ) => {
80+ preparePaletteFile ( app , {
81+ userPaletteFile,
82+ tempPaletteFile,
83+ importCode,
84+ } )
85+ } )
86+ paletteWatcher . on ( 'unlink' , ( ) => {
87+ preparePaletteFile ( app , {
88+ userPaletteFile,
89+ tempPaletteFile,
90+ importCode,
91+ } )
92+ } )
93+ watchers . push ( paletteWatcher )
10994
110- await app . writeTemp ( tempPaletteFile , paletteContent )
111- await app . writeTemp ( tempStyleFile , styleContent )
112- } ,
113- }
114- }
95+ const styleWatcher = chokidar . watch ( userStyleFile , {
96+ cwd : app . dir . source ( ) ,
97+ ignoreInitial : true ,
98+ } )
99+ styleWatcher . on ( 'add' , ( ) => {
100+ prepareStyleFile ( app , {
101+ userStyleFile,
102+ tempStyleFile,
103+ importCode,
104+ } )
105+ } )
106+ styleWatcher . on ( 'unlink' , ( ) => {
107+ prepareStyleFile ( app , {
108+ userStyleFile,
109+ tempStyleFile,
110+ importCode,
111+ } )
112+ } )
113+ watchers . push ( styleWatcher )
114+ } ,
115+ } )
115116
116117export default palettePlugin
0 commit comments