@hap-toolkit/compiler 2.0.2-alpha.1 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/style/mediaquery.js +1 -1
- package/package.json +3 -3
package/lib/style/mediaquery.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const RE_MEDIA_QUERY=/(?:(only|not)?\s*)?(\s*[^\s()]+)?(?:(?:\s*(and)\s*)?(.+))?/i,RE_MEDIA_FEATURE=/^(\(\s*[^()]+\)\s+[a-zA-Z]+\s+)+\(\s*[^()]+\)\s*$|^\(\s*[^()]+\)$/,RE_MQ_DISCRETE_EXPRESSION=/\(\s*([^\s:)]+)\s*(?::\s*([^\s)]+))?\s*\)/,RE_MQ_RANGE_EXPRESSION=/^\((?:([-+]?\d*\.?(?:\d+[a-zA-Z]*|\d+\s*\/\s*\d+))\s*(<|>|<=|>=)?\s*)?(aspect-ratio|resolution|width|height|device-width|device-height)(?:\s*(<|>|<=|>=)?\s*([-+]?\d*\.?(?:\d+[a-zA-Z]*|\d+\s*\/\s*\d+)))?\)$/,mediaQueryTypes=["screen"],featureValidatorMap={height:"number","min-height":"number","max-height":"number",width:"number","min-width":"number","max-width":"number",resolution:"resolution","min-resolution":"resolution","max-resolution":"resolution",orientation:"orientation","aspect-ratio":"ratio","min-aspect-ratio":"ratio","max-aspect-ratio":"ratio","device-height":"number","min-device-height":"number","max-device-height":"number","device-width":"number","min-device-width":"number","max-device-width":"number","prefers-color-scheme":"preferColorScheme",scene:"scene","widget-size":"widgetSize","device-type":"deviceType",manufacturer:"manufacturer","theme-mode":"themeMode"},featureValidator={number:e=>/^(\d+)(px|dp)?$/.test(e)?{value:e}:{reason:function(t){return"ERROR: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `数值`"}},resolution(e){if(/^\d+(dpi|dppx)$/.test(e))return{value:e};if(/^\d+$/.test(e)){return{value:e+"dpi",reason:function(e){return"WARN: 媒体特征 `"+e+"` 的单位为 `dpi | dppx` 自动补齐为 `dpi`"}}}return{reason:function(t){return"ERROR: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `数值 + dpi | dppx`"}}},orientation:e=>/^(portrait|landscape)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `portrait | landscape`"}},scene:e=>/^(assistantscreen|launcher|globalsearch|calendar|lockscreen|suggestion|voiceassistant|sms|servicecenter)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `assistantscreen | launcher | globalsearch | calendar | lockscreen | suggestion | voiceassistant | sms | servicecenter`"}},widgetSize(e){if(e){let t=e.trim();'"'!==t[0]&&"'"!==t[0]||(t=t.slice(1,t.length-1));if(/^(1|2|4|8|AUTO|FULL)x(1|2|4|8|AUTO|FULL)$/.test(t))return{value:t}}return{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `1x1 | 1x2 | 2x1 | 2x2 | 4x2 | 4x4 | 4xN`"}}},deviceType:e=>/^(phone|watch|car|tablet|foldable|flip)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `phone | watch | car`"}},manufacturer:e=>/^(xiaomi|vivo|OPPO|honor)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `xiaomi | vivo | OPPO| honor`"}},ratio:e=>/^(\d+\s*\/\s*\d+|\d+\.\d+|\d+)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `数值 | 数值/数值`"}},preferColorScheme:e=>/^(light|dark|no-preference)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `light | dark | no-preference`"}},themeMode:e=>/^(color|default)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `color | default`"}}};function parseQuery(e){const t=[];return{result:e.split(",").map((function(e){const r=(e=e.trim()).match(RE_MEDIA_QUERY),n=r[1],
|
|
1
|
+
"use strict";const RE_MEDIA_QUERY=/(?:(only|not)?\s*)?(\s*[^\s()]+)?(?:(?:\s*(and)\s*)?(.+))?/i,RE_MEDIA_FEATURE=/^(\(\s*[^()]+\)\s+[a-zA-Z]+\s+)+\(\s*[^()]+\)\s*$|^\(\s*[^()]+\)$/,RE_MQ_DISCRETE_EXPRESSION=/\(\s*([^\s:)]+)\s*(?::\s*([^\s)]+))?\s*\)/,RE_MQ_RANGE_EXPRESSION=/^\((?:([-+]?\d*\.?(?:\d+[a-zA-Z]*|\d+\s*\/\s*\d+))\s*(<|>|<=|>=)?\s*)?(aspect-ratio|resolution|width|height|device-width|device-height)(?:\s*(<|>|<=|>=)?\s*([-+]?\d*\.?(?:\d+[a-zA-Z]*|\d+\s*\/\s*\d+)))?\)$/,mediaQueryTypes=["screen"],featureValidatorMap={height:"number","min-height":"number","max-height":"number",width:"number","min-width":"number","max-width":"number",resolution:"resolution","min-resolution":"resolution","max-resolution":"resolution",orientation:"orientation","aspect-ratio":"ratio","min-aspect-ratio":"ratio","max-aspect-ratio":"ratio","device-height":"number","min-device-height":"number","max-device-height":"number","device-width":"number","min-device-width":"number","max-device-width":"number","prefers-color-scheme":"preferColorScheme",scene:"scene","widget-size":"widgetSize","device-type":"deviceType",manufacturer:"manufacturer","theme-mode":"themeMode"},featureValidator={number:e=>/^(\d+)(px|dp)?$/.test(e)?{value:e}:{reason:function(t){return"ERROR: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `数值`"}},resolution(e){if(/^\d+(dpi|dppx)$/.test(e))return{value:e};if(/^\d+$/.test(e)){return{value:e+"dpi",reason:function(e){return"WARN: 媒体特征 `"+e+"` 的单位为 `dpi | dppx` 自动补齐为 `dpi`"}}}return{reason:function(t){return"ERROR: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `数值 + dpi | dppx`"}}},orientation:e=>/^(portrait|landscape)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `portrait | landscape`"}},scene:e=>/^(assistantscreen|launcher|globalsearch|calendar|lockscreen|suggestion|voiceassistant|sms|servicecenter|cardesktop)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `assistantscreen | launcher | globalsearch | calendar | lockscreen | suggestion | voiceassistant | sms | servicecenter | cardesktop`"}},widgetSize(e){if(e){let t=e.trim();'"'!==t[0]&&"'"!==t[0]||(t=t.slice(1,t.length-1));if(/^(1|2|4|8|AUTO|FULL)x(1|2|4|8|AUTO|FULL)$/.test(t))return{value:t}}return{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `1x1 | 1x2 | 2x1 | 2x2 | 4x2 | 4x4 | 4xN`"}}},deviceType:e=>/^(phone|watch|car|tablet|foldable|flip)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `phone | watch | car`"}},manufacturer:e=>/^(xiaomi|vivo|OPPO|honor)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `xiaomi | vivo | OPPO| honor`"}},ratio:e=>/^(\d+\s*\/\s*\d+|\d+\.\d+|\d+)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `数值 | 数值/数值`"}},preferColorScheme:e=>/^(light|dark|no-preference)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `light | dark | no-preference`"}},themeMode:e=>/^(color|default)$/.test(e)?{value:e}:{reason:function(t){return"WARN: 媒体特征 `"+t+"` 的值 `"+e+"` 不正确, 必须为 `color | default`"}}};function parseQuery(e){const t=[];return{result:e.split(",").map((function(e){const r=(e=e.trim()).match(RE_MEDIA_QUERY),n=r[1],a=r[2],i=r[3],o=r[4]||"";if(o&&!o.match(RE_MEDIA_FEATURE))return void t.push("WARN: 媒体特征格式错误");const s={};s.modifier=n,s.type=a?a.toLowerCase():"screen";let u=o.match(/\([^)]+\)/g)||[];return s.operator=i,s.expressions=u.map((function(r){const n=new RegExp(`\\)\\s+([a-zA-Z]+)?\\s+${r.replace(/\(/,"\\(").replace(/\)/,"\\)")}`),a=e.match(n);let i="";if(a&&(i=a[1],"and"!==i&&"or"!==i))return void t.push("WARN: 媒体特征连接符必须为 and 或者 or");let o=r.match(RE_MQ_DISCRETE_EXPRESSION);return o?{type:"discrete",combineSymbol:i,feature:o[1],value:o[2]}:(o=r.match(RE_MQ_RANGE_EXPRESSION),o?{type:"range",combineSymbol:i,beforeValue:o[1],beforeSymbol:o[2],feature:o[3],afterSymbol:o[4],afterValue:o[5]}:void t.push('WARN: 无效的媒体特征表达式: "'+r+'"'))})),s})),error:t}}function validateDiscreteValue(e,t,r,n){const a=featureValidator[r](e.value),{value:i,reason:o}=a;let s="";return o&&o&&n.push(o(t)),i&&(s+=`${t}: ${i}`),s}function validateRangeValue(e,t,r,n){function a(e){let a=featureValidator[r](e);const{reason:i,value:o}=a;return i&&n.push(i(t)),o}let{beforeValue:i,beforeSymbol:o,afterSymbol:s,afterValue:u}=e,d=t;if(i){if(i=a(i),!i)return"";d=`${i} ${o} ${d}`}if(u){if(u=a(u),!u)return"";d=`${d} ${s} ${u}`}return d}function validateMediaCondition(e){if(e){const t=[],r=parseQuery(e);if(r.error.length>0)return r.error.forEach((r=>{r+=", 表达式: `"+e+"` 有错误,请检查",t.push(r)})),{reason:t};const n=[];return r.result.forEach((e=>{const{modifier:r,type:a,operator:i,expressions:o}=e;if(-1===mediaQueryTypes.indexOf(a))return void t.push("WARN: 媒体类型 `"+a+"` 不支持");let s=i||"";o.length>0&&!i&&(s="and");let u=r?`${r} ${a} ${s}`:`${a} ${s}`;o.forEach((e=>{const{feature:r,combineSymbol:n,type:a}=e,i=featureValidatorMap[r];if(!i)return u="",void t.push("WARN: 媒体特征 `"+r+"` 不支持");let o="";"discrete"===a?o=validateDiscreteValue(e,r,i,t):"range"===a&&(o=validateRangeValue(e,r,i,t)),o?u+=n?` ${n} (${o})`:` (${o})`:u=""})),n.push(u)})),{value:n.join(" or "),reason:t}}return{value:""}}function findMediaClassByCondition(e,t){if(t){return e.find((e=>e.condition===t))}return null}function wrapMediaCode(e,t){return`@media ${t} {\n${e}\n}`}module.exports={validateMediaCondition:validateMediaCondition,findMediaClassByCondition:findMediaClassByCondition,wrapMediaCode:wrapMediaCode};
|
|
2
2
|
//# sourceMappingURL=mediaquery.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hap-toolkit/compiler",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.3",
|
|
4
4
|
"description": "compiler of hap-toolkit",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=14.0.0"
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
"lib/**/*.js"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@hap-toolkit/shared-utils": "2.0.
|
|
25
|
+
"@hap-toolkit/shared-utils": "2.0.3",
|
|
26
26
|
"@jayfate/path": "^0.0.13",
|
|
27
27
|
"css": "^2.2.4",
|
|
28
28
|
"css-what": "^2.1.3",
|
|
29
29
|
"parse5": "^3.0.3"
|
|
30
30
|
},
|
|
31
|
-
"gitHead": "
|
|
31
|
+
"gitHead": "c23b00c2aea7f686a486841a2134bfec36b14fa0"
|
|
32
32
|
}
|