77 isStringLiteral ,
88} from '@babel/types'
99import { walk } from 'estree-walker'
10+ import { normalizePath } from '../utils'
1011
1112const externalClassesCache = new Map <
1213 string ,
@@ -25,19 +26,27 @@ export interface PageExternalClassesInfo {
2526 hasAppAndPageStyle ?: boolean
2627}
2728
28- const pageStyleIsolationCache = new Map < string , boolean > ( ) // 子组件是否存在 styleIsolation 为app
29+ export type StyleIsolation = 'isolated' | 'app' | 'app-and-page'
30+
31+ const pageStyleIsolationCache = new Map <
32+ string ,
33+ {
34+ styleIsolation : StyleIsolation
35+ isPage : boolean
36+ }
37+ > ( )
2938
3039const pageExternalClassesCache = new Map < string , PageExternalClassesInfo > ( )
3140
3241export function findPageExternalClasses ( filename : string ) {
33- return pageExternalClassesCache . get ( filename )
42+ return pageExternalClassesCache . get ( normalizePath ( filename ) )
3443}
3544
3645export function updatePageExternalClasses (
3746 filename : string ,
3847 info : PageExternalClassesInfo
3948) {
40- pageExternalClassesCache . set ( filename , info )
49+ pageExternalClassesCache . set ( normalizePath ( filename ) , info )
4150}
4251
4352export function addPageExternalClasses (
@@ -46,10 +55,11 @@ export function addPageExternalClasses(
4655 hasDynamic : boolean ,
4756 hasAppAndPageStyle ?: boolean
4857) {
49- let info = pageExternalClassesCache . get ( filename )
58+ const normalizedFilename = normalizePath ( filename )
59+ let info = pageExternalClassesCache . get ( normalizedFilename )
5060 if ( ! info ) {
5161 info = { staticClasses : new Set ( ) , hasDynamic : false }
52- pageExternalClassesCache . set ( filename , info )
62+ pageExternalClassesCache . set ( normalizedFilename , info )
5363 }
5464 staticClasses . forEach ( ( cls ) => info ! . staticClasses . add ( cls ) )
5565 if ( hasDynamic ) {
@@ -61,22 +71,22 @@ export function addPageExternalClasses(
6171}
6272
6373export function clearPageExternalClasses ( filename : string ) {
64- pageExternalClassesCache . delete ( filename )
74+ pageExternalClassesCache . delete ( normalizePath ( filename ) )
6575}
6676
6777export function hasExternalClasses ( code : string ) {
6878 return code . includes ( 'externalClasses' )
6979}
7080
7181export function findMiniProgramComponentExternalClasses ( filename : string ) {
72- return externalClassesCache . get ( filename )
82+ return externalClassesCache . get ( normalizePath ( filename ) )
7383}
7484
7585export function updateMiniProgramComponentExternalClasses (
7686 filename : string ,
7787 value : { mtime : number ; classes : string [ ] }
7888) {
79- externalClassesCache . set ( filename , value )
89+ externalClassesCache . set ( normalizePath ( filename ) , value )
8090}
8191
8292export function parseExternalClasses ( ast : Program ) {
@@ -103,8 +113,8 @@ export function parseExternalClasses(ast: Program) {
103113 return classes
104114}
105115
106- export function parseStyleIsolation ( ast : Program ) {
107- let styleIsolationValue = ''
116+ export function parseStyleIsolation ( ast : Program ) : StyleIsolation | '' {
117+ let styleIsolationValue : StyleIsolation | '' = ''
108118 ; ( walk as any ) ( ast , {
109119 enter ( child : Node , parent : Node ) {
110120 if ( ! isIdentifier ( child ) || child . name !== 'styleIsolation' ) {
@@ -116,22 +126,36 @@ export function parseStyleIsolation(ast: Program) {
116126 if ( ! isStringLiteral ( parent . value ) ) {
117127 return
118128 }
119- if ( parent . value . value === 'app' ) {
120- styleIsolationValue = 'app'
129+ if (
130+ parent . value . value === 'app' ||
131+ parent . value . value === 'app-and-page' ||
132+ parent . value . value === 'isolated'
133+ ) {
134+ styleIsolationValue = parent . value . value
121135 }
122136 return parent . value . value
123137 } ,
124138 } )
125139 return styleIsolationValue
126140}
127141
142+ /**
143+ * 目前只有小程序平台才会走这个逻辑
144+ * @param pagePahth
145+ * @param value
146+ * @param isPage
147+ */
128148export function updateMiniProgramComponentStyleIsolation (
129149 pagePahth : string ,
130- value : boolean
150+ value : StyleIsolation ,
151+ isPage = false
131152) {
132- pageStyleIsolationCache . set ( pagePahth , value )
153+ pageStyleIsolationCache . set ( normalizePath ( pagePahth ) , {
154+ styleIsolation : value ,
155+ isPage,
156+ } )
133157}
134158
135159export function findMiniProgramComponentStyleIsolation ( pagePahth : string ) {
136- return pageStyleIsolationCache . get ( pagePahth )
160+ return pageStyleIsolationCache . get ( normalizePath ( pagePahth ) )
137161}
0 commit comments