@hap-toolkit/compiler 2.0.9-alpha.3 → 2.0.9-alpha.4

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkUiData=checkUiData;var _cardExpression=require("@aiot-toolkit/card-expression"),_exp=_interopRequireDefault(require("../template/exp"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const RESERVED_PREFIXES=["$","#"],ALLOWED_CALLS=["$t","$tc"];function isReservedKey(e){return RESERVED_PREFIXES.indexOf((e+"").charAt(0))>-1}function isObject(e){return e&&"[object Object]"===Object.prototype.toString.call(e)}function checkKey(e,r){if(isReservedKey(e))throw new Error(`<data> uiData 的 key 不能以 “$” 或 “#” 开头:${r}`);if(_exp.default.isExpr(e))throw new Error(`<data> uiData 的 key 必须为静态字符串,不支持表达式:${r}`)}function checkExprNode(e,r,t){if(Array.isArray(e)){if("()"===e[0]&&-1===ALLOWED_CALLS.indexOf(e[1]))throw new Error(`<data> uiData 中 "${r}" 的表达式禁止调用 Feature / 函数,仅支持静态系统变量引用(如 system.env.intentInfo)与表达式计算:${t.trim()}`);e.forEach((e=>checkExprNode(e,r,t)))}else isObject(e)&&Object.keys(e).forEach((c=>checkExprNode(e[c],r,t)))}function checkExpression(e,r){let t;try{t=(0,_cardExpression.templateValueToCardCode)(e)}catch(e){throw new Error(`<data> uiData 中 "${r}" 的表达式无法解析:${e.message}`)}checkExprNode(JSON.parse(t),r,e)}function checkValue(e,r){"string"!=typeof e?Array.isArray(e)?e.forEach(((e,t)=>checkValue(e,`${r}[${t}]`))):isObject(e)&&Object.keys(e).forEach((t=>{checkKey(t,`${r}.${t}`),checkValue(e[t],`${r}.${t}`)})):_exp.default.isExpr(e)&&checkExpression(e,r)}function checkUiData(e){if(e&&!isObject(e))throw new Error("<data> uiData 必须为 Object 对象");Object.keys(e||{}).forEach((r=>{checkKey(r,r),checkValue(e[r],r)}))}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.checkUiData=checkUiData;var _cardExpression=require("@aiot-toolkit/card-expression"),_exp=_interopRequireDefault(require("../template/exp")),_forbiddenFeature=require("../common/forbidden-feature");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const RESERVED_PREFIXES=["$","#"],ALLOWED_CALLS=["$t","$tc"],FEATURE_NAMESPACES=["system","service"];function isReservedKey(e){return RESERVED_PREFIXES.indexOf((e+"").charAt(0))>-1}function isObject(e){return e&&"[object Object]"===Object.prototype.toString.call(e)}function checkKey(e,r){if(isReservedKey(e))throw new Error(`<data> uiData 的 key 不能以 “$” 或 “#” 开头:${r}`);if(_exp.default.isExpr(e))throw new Error(`<data> uiData 的 key 必须为静态字符串,不支持表达式:${r}`)}function getMemberPath(e){if(Array.isArray(e)){if("$"===e[0]&&"string"==typeof e[1])return[e[1]];if("."===e[0]&&"string"==typeof e[2]){const r=getMemberPath(e[1]);if(r)return r.concat(e[2])}}return null}function isFeatureCall(e){return!!(e&&e.length>1&&FEATURE_NAMESPACES.indexOf(e[0])>-1)}function isForbiddenFeature(e){return _forbiddenFeature.FORBIDDEN_TEMPLATE_FEATURES.some((r=>e===r||0===e.indexOf(r+".")))}function checkExprNode(e,r,t){if(Array.isArray(e)){if("()"===e[0]&&-1===ALLOWED_CALLS.indexOf(e[1])){const a=getMemberPath(e[1]);if(!isFeatureCall(a))throw new Error(`<data> uiData 中 "${r}" 的表达式仅支持静态系统变量引用(如 system.env.intentInfo)、表达式计算与非耗时 Feature 调用($t / $tc 除外),禁止调用其他函数 / 方法:${t.trim()}`);const i=a.join(".");if(isForbiddenFeature(i))throw new Error(`<data> uiData 中 "${r}" 的表达式不允许调用耗时 Feature "${i}"(uiData 默认值在卡片创建时于 UI 线程同步求值);建议改用非耗时 Feature,或通过 create/update params、数据提供方下发`)}e.forEach((e=>checkExprNode(e,r,t)))}else isObject(e)&&Object.keys(e).forEach((a=>checkExprNode(e[a],r,t)))}function checkExpression(e,r){let t;try{t=(0,_cardExpression.templateValueToCardCode)(e)}catch(e){throw new Error(`<data> uiData 中 "${r}" 的表达式无法解析:${e.message}`)}if(!t)throw new Error(`<data> uiData 中 "${r}" 的表达式无法解析:表达式为空`);checkExprNode(JSON.parse(t),r,e)}function checkValue(e,r){"string"!=typeof e?Array.isArray(e)?e.forEach(((e,t)=>checkValue(e,`${r}[${t}]`))):isObject(e)&&Object.keys(e).forEach((t=>{checkKey(t,`${r}.${t}`),checkValue(e[t],`${r}.${t}`)})):_exp.default.isExpr(e)&&checkExpression(e,r)}function checkUiData(e){if(e&&!isObject(e))throw new Error("<data> uiData 必须为 Object 对象");Object.keys(e||{}).forEach((r=>{checkKey(r,r),checkValue(e[r],r)}))}
2
2
  //# sourceMappingURL=validator.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hap-toolkit/compiler",
3
- "version": "2.0.9-alpha.3",
3
+ "version": "2.0.9-alpha.4",
4
4
  "description": "compiler of hap-toolkit",
5
5
  "engines": {
6
6
  "node": ">=14.0.0"
@@ -23,7 +23,7 @@
23
23
  ],
24
24
  "dependencies": {
25
25
  "@aiot-toolkit/card-expression": "^1.0.15",
26
- "@hap-toolkit/shared-utils": "2.0.9-alpha.3",
26
+ "@hap-toolkit/shared-utils": "2.0.9-alpha.4",
27
27
  "@jayfate/path": "^0.0.13",
28
28
  "css": "^2.2.4",
29
29
  "css-what": "^2.1.3",