@soonflow/plugin-soonmanager2-node
Advanced tools
Comparing version 0.1.4 to 0.1.5
@@ -9,2 +9,2 @@ import SoonSpace from 'soonspacejs'; | ||
export declare const playCilpAnimation: (ssp: SoonSpace, cilpAnimationData: ObjectAnimationNodeInitDataConfig['cilpAnimationData']) => Promise<void>; | ||
export declare const stopCilpAnimation: (cilpAnimationData: ObjectAnimationNodeInitDataConfig['cilpAnimationData']) => Promise<void>; | ||
export declare const stopCilpAnimation: (ssp: SoonSpace, cilpAnimationData: ObjectAnimationNodeInitDataConfig['cilpAnimationData']) => Promise<void>; |
@@ -1,1 +0,1 @@ | ||
import{error as t}from"@soonflow/core";import a from"axios";const e={async parse({node:t}){const{modelInfos:a}=JSON.parse(t.config);t.outputs.forEach((e=>{e.data={type:"model",data:a},this.parseFlowNode(t,e)}))}},o={async parse({node:t}){const a=JSON.parse(t.config),{materialId:e}=a;t.outputs.forEach((a=>{a.data={type:"material",data:e},this.parseFlowNode(t,a)}))}},i={async parse({node:t}){t.outputs.forEach((a=>{this.parseFlowNode(t,a)}))}};var s,n;!function(t){t.CLIP="cilp",t.INNER="inner"}(s||(s={})),function(t){t.PLAY="play",t.STOP="stop"}(n||(n={}));const r=new Map,c={async parse({node:a,inputData:e}){const o=this.getOutInstance("ssp");if(!o)return;const i=JSON.parse(a.config),{data:c}=e;if(!c.length)return t("模型动画 -> 未绑定模型数据");const{animationType:p,cilpAnimationData:l,innerAnimationIndex:d,animationPlayState:u,delay:f,duration:y}=i;await o.utils.sleep(f);const h=async()=>{switch(u){case n.PLAY:(async(a,e)=>{if(!e)return t("播放模型动画 -> 缺少 cilpAnimationData 数据");const{animation:o,keyframes:i}=e,{nodeId:s}=o,n=r.get(s),c=a.getObjectById(s);if(!c)return t(`播放模型动画 -> 方法 playCilpAnimation 执行时 id 为 ${s} 场景对象未找到`);if(n){n.tween.stop();const{positionX:t,positionY:e,positionZ:o,rotationX:i,rotationY:p,rotationZ:l,scaleX:d,scaleY:u,scaleZ:f}=n.source;c.position.set(t,e,o),c.rotation.set(i,p,l),c.scale.set(d,u,f),a.render(),r.delete(s)}for(let t=0;t<i.length;t++){const e={positionX:c.position.x,positionY:c.position.y,positionZ:c.position.z,rotationX:c.rotation.x,rotationY:c.rotation.y,rotationZ:c.rotation.z,scaleX:c.scale.x,scaleY:c.scale.y,scaleZ:c.scale.z},o=i[t],{delay:n,duration:p,easing:l,repeat:d,yoyo:u}=o,f={positionX:o.position.x||0,positionY:o.position.y||0,positionZ:o.position.z||0,rotationX:o.rotation.x||0,rotationY:o.rotation.y||0,rotationZ:o.rotation.z||0,scaleX:o.scale.x||1,scaleY:o.scale.y||1,scaleZ:o.scale.z||1};await a.animation(e,f,{delay:n,duration:p,mode:l,repeat:-1===d?1/0:d,yoyo:u},(({positionX:t,positionY:a,positionZ:e,rotationX:o,rotationY:i,rotationZ:s,scaleX:n,scaleY:r,scaleZ:p})=>{c.position.set(t,a,e),c.rotation.set(o,i,s),c.scale.set(n,r,p)}),(t=>{r.set(s,{source:JSON.parse(JSON.stringify(e)),tween:t})})),r.delete(s)}})(o,l);break;case n.STOP:(async a=>{if(!a)return t("停止模型动画 -> 缺少 cilpAnimationData 数据");const{animation:e}=a,{nodeId:o}=e;r.get(o)?.tween.stop(),r.delete(o)})(l)}await o.utils.sleep(y)};switch(p){case s.INNER:await(async()=>{const{sid:a,uuid:e}=c[0];let i=null;if(i=a?o.getModelById(c[0].sid):o.getModelByUserDataProperty("uuid",e)[0],!i)return t(`模型动画 -> 场景中未找到 ${a?"id":"uuid"} 为 "${a||e}" 的模型对象`);switch(u){case n.PLAY:o.playModelAnimation(i,d);break;case n.STOP:o.stopModelAnimation(i,d)}await o.utils.sleep(y)})();break;case s.CLIP:await h()}a.outputs.forEach((t=>{t.data={...e},this.parseFlowNode(a,t)}))}},p={async parse({node:a,inputData:e}){const o=this.getOutInstance("ssp");if(!o)return;const i=JSON.parse(a.config),{data:s}=e;if(!s.length)return t("模型 Poi -> 未绑定模型数据");const{poiId:n,poiShow:r,delay:c,duration:p}=i;await o.utils.sleep(c),console.log("ObjectPoiNodeInitDataConfig",n,r,p),await a.outputs.forEach((async t=>{t.data={...e},await this.parseFlowNode(a,t)}))}};var l;!function(t){t.CUSTOM="custom",t.FIXED="fixed"}(l||(l={}));const d={async parse({node:a,inputData:e}){const o=this.getOutInstance("ssp");if(!o)return;const i=JSON.parse(a.config),{data:s}=e;if(!s.length)return t("模型视角 -> 未绑定模型数据");const{viewpointType:n,customViewpointData:r,fixedViewpointValue:c,delay:p,duration:d}=i;await o.utils.sleep(p);switch(n){case l.CUSTOM:await(async()=>{if(!r)return t("模型视角 -> 解析解析时缺少自定义时间数据");await o.flyTo(r.position,r.rotation,{duration:d})})();break;case l.FIXED:await(async()=>{const{sid:a,uuid:e}=s[0];let i=null;if(i=a?o.getModelById(s[0].sid):o.getModelByUserDataProperty("uuid",e)[0],!i)return t(`模型动画 -> 场景中未找到 ${a?"id":"uuid"} 为 "${a||e}" 的模型对象`);await o.flyToObj(i,c,{duration:d})})()}await a.outputs.forEach((t=>{t.data={...e},this.parseFlowNode(a,t)}))}},u={async parse({node:t,inputData:a}){const e=this.getOutInstance("ssp");if(!e)return;const{viewpointData:o}=JSON.parse(t.config),i=JSON.parse(o);await e.flyTo(i.position,i.rotation),t.outputs.forEach((e=>{e.data=a,this.parseFlowNode(t,e)}))}};function f(t){const a={};return t.forEach((t=>{let e=t.defaultValue;switch(t.varType){case"boolean":e="boolean"==typeof t.defaultValue?t.defaultValue:"true"===t.defaultValue;break;case"number":e=Number(t.defaultValue)}a[t.parameterName]=e})),a}const y={async parse({node:t,inputData:a}){const e=this.getOutInstance("ssp");if(!e)return;const{type:o,data:i,fromInteraction:s,eventKey:n,nodeId:r}=a,{behaviorType:c,actionCode:p,customCode:l,behaviorVars:d,delay:u,duration:y}=JSON.parse(t.config);await e.utils.sleep(u);let h=[];switch(o){case"model":i.forEach((({sid:t,uuid:a})=>{if(t){const a=e.getObjectById(t);a&&h.push(a)}else h.push(...e.getObjectByUserDataProperty("uuid",a))}));break;case"material":h=e.getObjectByUserDataProperty("familyId",i)}if(s)if("SYS"===c||"CUS"===c){const t=f(d);h.forEach((a=>{this.addSignal(`${r}_${a.sid}_${n}`,(async()=>{const o=new Function("{ssp, vars, _this}",`(async () => { ${p} })()`);await o({ssp:e,vars:t,_this:a})}))}))}else"CUSTOM"===c&&h.forEach((t=>{this.addSignal(`${r}_${t.sid}_${n}`,(async()=>{const o=new Function("{ ssp, object, inputData }",`(async () => { ${l} })()`);await o({ssp:e,object:t,inputData:a})}))}));else if("SYS"===c||"CUS"===c){const t=f(d);for(let a=0;a<h.length;a++){const o=h[a],i=new Function("{ssp, vars, _this}",`(async () => { ${p} })()`);await i({ssp:e,vars:t,_this:o})}}else if("CUSTOM"===c)for(let t=0;t<h.length;t++){const o=h[t],i=new Function("{ ssp, object, inputData }",`(async () => { ${l} })()`);await i({ssp:e,object:o,inputData:a})}await e.utils.sleep(y),t.outputs.forEach((a=>{this.parseFlowNode(t,a)}))}},h={async parse({node:t,inputData:a}){const e=this.getOutInstance("ssp");if(!e)return;const{type:o,data:i}=a,{eventKey:s}=JSON.parse(t.config),n=(a,e)=>{if(!a)return;let o=null;switch(e){case"click":o=a.onClick,a.onClick=()=>{o?.(),this.dispatchSignal(`${t.id}_${a.sid}_${e}`)};break;case"dblClick":o=a.onDblClick,a.onDblClick=()=>{o?.(),this.dispatchSignal(`${t.id}_${a.sid}_${e}`)};break;case"rightClick":o=a.onRightClick,a.onRightClick=()=>{o?.(),this.dispatchSignal(`${t.id}_${a.sid}_${e}`)}}};let r=[];switch(o){case"model":i.forEach((({sid:t,uuid:a})=>{if(t){const a=e.getObjectById(t);a&&r.push(a)}else r.push(...e.getObjectByUserDataProperty("uuid",a))}));break;case"material":r=e.getObjectByUserDataProperty("familyId",i)}r.forEach((t=>n(t,s))),t.outputs.forEach((e=>{e.data={...a,fromInteraction:!0,eventKey:s,nodeId:t.id},this.parseFlowNode(t,e)}))}},w={async parse({node:t}){const a=JSON.parse(t.config),e=JSON.parse(a.codeString);t.outputs.forEach((a=>{a.data=e,this.parseFlowNode(t,a)}))}},m=t=>t.reduce(((t,a)=>(a.key&&(t[a.key]=a.value),t)),{}),O={async parse({node:e}){const o=JSON.parse(e.config),{address:i,bodies:s,bodyType:n,headers:r,params:c,type:p}=o.requestInfo;let l,d,u;if(c.length>0&&(l=m(c)),s.length>0)if("multipart/form-data"===n){const t=new FormData;s.map((a=>{t.set(a.key,a.value)})),d=t}else d="application/x-www-form-urlencoded"===n?new URLSearchParams(s.map((t=>[t.key,t.value]))):m(s);r.length>0&&(u=m(r));try{const t=await a({method:p,url:i,params:l,data:d,headers:u});e.outputs.forEach((a=>{a.data=t,this.parseFlowNode(e,a)}))}catch(a){t(`flow node "${e.name}" parse error`,a)}}},g={async parse({node:t,inputData:a}){a&&t.outputs.some((e=>{const{config:o}=e,{codeString:i}=JSON.parse(o),s=new Function("sourceData",i)(a);if(s)return e.data=s,this.parseFlowNode(t,e),!0}))}},N={async parse({node:t,inputData:a}){const{filterCode:e}=JSON.parse(t.config),o=new Function("sourceData",e)(a);t.outputs.forEach((a=>{a.data=o,this.parseFlowNode(t,a)}))}};var I;!function(t){t.START="start",t.MODEL="model",t.MATERIAL="material",t.FLOW="flow",t.OBJECT_ANIMATION="objectAnimation",t.OBJECT_POI="objectPoi",t.OBJECT_VIEWPOINT="objectViewpoint",t.SCENE_VIEWPOINT="sceneViewpoint",t.ACTION="action",t.INTERACTION="interaction",t.STATIC_DATA="staticData",t.INTERFACE_DATA="interfaceData",t.CONDITION="condition",t.FILTER="filter",t.VIEWPOINT="viewpoint"}(I||(I={}));const b={model:e,material:o,flow:i,objectAnimation:c,objectPoi:p,objectViewpoint:d,sceneViewpoint:u,action:y,interaction:h,staticData:w,interfaceData:O,condition:g,filter:N,viewpoint:u};export{I as FlowNodeTypesEnum,b as FlowNodesParseMethods,c as ObjectAnimationNodeParseMethods,n as ObjectAnimationPlayState,s as ObjectAnimationType,p as ObjectPoiNodeParseMethods,d as ObjectViewpointNodeParseMethods,l as ObjectViewpointType}; | ||
import{error as t}from"@soonflow/core";import a from"axios";const e={async parse({node:t}){const{modelInfos:a}=JSON.parse(t.config);t.outputs.forEach((e=>{e.data={type:"model",data:a},this.parseFlowNode(t,e)}))}},o={async parse({node:t}){const a=JSON.parse(t.config),{materialId:e}=a;t.outputs.forEach((a=>{a.data={type:"material",data:e},this.parseFlowNode(t,a)}))}},i={async parse({node:t}){t.outputs.forEach((a=>{this.parseFlowNode(t,a)}))}};var s,n;!function(t){t.CLIP="cilp",t.INNER="inner"}(s||(s={})),function(t){t.PLAY="play",t.STOP="stop"}(n||(n={}));const r=new Map,c={async parse({node:a,inputData:e}){const o=this.getOutInstance("ssp");if(!o)return;const i=JSON.parse(a.config),{data:c}=e;if(!c.length)return t("模型动画 -> 未绑定模型数据");const{animationType:p,cilpAnimationData:d,innerAnimationIndex:l,animationPlayState:u,delay:f,duration:y}=i;await o.utils.sleep(f);const h=async()=>{switch(u){case n.PLAY:(async(a,e)=>{if(!e)return t("播放模型动画 -> 缺少 cilpAnimationData 数据");const{animation:o,keyframes:i}=e,{nodeId:s,nodeUuid:n}=o,c=s||a.getObjectByUserDataProperty("uuid",n)?.[0].sid,p=r.get(c),d=a.getObjectById(c);if(!d)return t(`播放模型动画 -> 方法 playCilpAnimation 执行时 ${s?"id":"uuid"} 为 ${s||n} 场景对象未找到`);if(p){p.tween.stop();const{positionX:t,positionY:e,positionZ:o,rotationX:i,rotationY:s,rotationZ:n,scaleX:l,scaleY:u,scaleZ:f}=p.source;d.position.set(t,e,o),d.rotation.set(i,s,n),d.scale.set(l,u,f),a.render(),r.delete(c)}for(let t=0;t<i.length;t++){const e={positionX:d.position.x,positionY:d.position.y,positionZ:d.position.z,rotationX:d.rotation.x,rotationY:d.rotation.y,rotationZ:d.rotation.z,scaleX:d.scale.x,scaleY:d.scale.y,scaleZ:d.scale.z},o=i[t],{delay:s,duration:n,easing:p,repeat:l,yoyo:u}=o,f={positionX:o.position.x||0,positionY:o.position.y||0,positionZ:o.position.z||0,rotationX:o.rotation.x||0,rotationY:o.rotation.y||0,rotationZ:o.rotation.z||0,scaleX:o.scale.x||1,scaleY:o.scale.y||1,scaleZ:o.scale.z||1};await a.animation(e,f,{delay:s,duration:n,mode:p,repeat:-1===l?1/0:l,yoyo:u},(({positionX:t,positionY:a,positionZ:e,rotationX:o,rotationY:i,rotationZ:s,scaleX:n,scaleY:r,scaleZ:c})=>{d.position.set(t,a,e),d.rotation.set(o,i,s),d.scale.set(n,r,c)}),(t=>{r.set(c,{source:JSON.parse(JSON.stringify(e)),tween:t})})),r.delete(c)}})(o,d);break;case n.STOP:(async(a,e)=>{if(!e)return t("停止模型动画 -> 缺少 cilpAnimationData 数据");const{animation:o}=e,{nodeId:i,nodeUuid:s}=o,n=i||a.getObjectByUserDataProperty("uuid",s)?.[0].sid;r.get(n)?.tween.stop(),r.delete(n)})(o,d)}await o.utils.sleep(y)};switch(p){case s.INNER:await(async()=>{const{sid:a,uuid:e}=c[0];let i=null;if(i=a?o.getModelById(c[0].sid):o.getModelByUserDataProperty("uuid",e)[0],!i)return t(`模型动画 -> 场景中未找到 ${a?"id":"uuid"} 为 "${a||e}" 的模型对象`);switch(u){case n.PLAY:o.playModelAnimation(i,l);break;case n.STOP:o.stopModelAnimation(i,l)}await o.utils.sleep(y)})();break;case s.CLIP:await h()}a.outputs.forEach((t=>{t.data={...e},this.parseFlowNode(a,t)}))}},p={async parse({node:a,inputData:e}){const o=this.getOutInstance("ssp");if(!o)return;const i=JSON.parse(a.config),{data:s}=e;if(!s.length)return t("模型 Poi -> 未绑定模型数据");const{poiId:n,poiShow:r,delay:c,duration:p}=i;await o.utils.sleep(c),console.log("ObjectPoiNodeInitDataConfig",n,r,p),await a.outputs.forEach((async t=>{t.data={...e},await this.parseFlowNode(a,t)}))}};var d;!function(t){t.CUSTOM="custom",t.FIXED="fixed"}(d||(d={}));const l={async parse({node:a,inputData:e}){const o=this.getOutInstance("ssp");if(!o)return;const i=JSON.parse(a.config),{data:s}=e;if(!s.length)return t("模型视角 -> 未绑定模型数据");const{viewpointType:n,customViewpointData:r,fixedViewpointValue:c,delay:p,duration:l}=i;await o.utils.sleep(p);switch(n){case d.CUSTOM:await(async()=>{if(!r)return t("模型视角 -> 解析解析时缺少自定义时间数据");await o.flyTo(r.position,r.rotation,{duration:l})})();break;case d.FIXED:await(async()=>{const{sid:a,uuid:e}=s[0];let i=null;if(i=a?o.getModelById(s[0].sid):o.getModelByUserDataProperty("uuid",e)[0],!i)return t(`模型动画 -> 场景中未找到 ${a?"id":"uuid"} 为 "${a||e}" 的模型对象`);await o.flyToObj(i,c,{duration:l})})()}await a.outputs.forEach((t=>{t.data={...e},this.parseFlowNode(a,t)}))}},u={async parse({node:t,inputData:a}){const e=this.getOutInstance("ssp");if(!e)return;const{viewpointData:o}=JSON.parse(t.config),i=JSON.parse(o);await e.flyTo(i.position,i.rotation),t.outputs.forEach((e=>{e.data=a,this.parseFlowNode(t,e)}))}};function f(t){const a={};return t.forEach((t=>{let e=t.defaultValue;switch(t.varType){case"boolean":e="boolean"==typeof t.defaultValue?t.defaultValue:"true"===t.defaultValue;break;case"number":e=Number(t.defaultValue)}a[t.parameterName]=e})),a}const y={async parse({node:t,inputData:a}){const e=this.getOutInstance("ssp");if(!e)return;const{type:o,data:i,fromInteraction:s,eventKey:n,nodeId:r}=a,{behaviorType:c,actionCode:p,customCode:d,behaviorVars:l,delay:u,duration:y}=JSON.parse(t.config);await e.utils.sleep(u);let h=[];switch(o){case"model":i.forEach((({sid:t,uuid:a})=>{if(t){const a=e.getObjectById(t);a&&h.push(a)}else h.push(...e.getObjectByUserDataProperty("uuid",a))}));break;case"material":h=e.getObjectByUserDataProperty("familyId",i)}if(s)if("SYS"===c||"CUS"===c){const t=f(l);h.forEach((a=>{this.addSignal(`${r}_${a.sid}_${n}`,(async()=>{const o=new Function("{ssp, vars, _this}",`(async () => { ${p} })()`);await o({ssp:e,vars:t,_this:a})}))}))}else"CUSTOM"===c&&h.forEach((t=>{this.addSignal(`${r}_${t.sid}_${n}`,(async()=>{const o=new Function("{ ssp, object, inputData }",`(async () => { ${d} })()`);await o({ssp:e,object:t,inputData:a})}))}));else if("SYS"===c||"CUS"===c){const t=f(l);for(let a=0;a<h.length;a++){const o=h[a],i=new Function("{ssp, vars, _this}",`(async () => { ${p} })()`);await i({ssp:e,vars:t,_this:o})}}else if("CUSTOM"===c)for(let t=0;t<h.length;t++){const o=h[t],i=new Function("{ ssp, object, inputData }",`(async () => { ${d} })()`);await i({ssp:e,object:o,inputData:a})}await e.utils.sleep(y),t.outputs.forEach((a=>{this.parseFlowNode(t,a)}))}},h={async parse({node:t,inputData:a}){const e=this.getOutInstance("ssp");if(!e)return;const{type:o,data:i}=a,{eventKey:s}=JSON.parse(t.config),n=(a,e)=>{if(!a)return;let o=null;switch(e){case"click":o=a.onClick,a.onClick=()=>{o?.(),this.dispatchSignal(`${t.id}_${a.sid}_${e}`)};break;case"dblClick":o=a.onDblClick,a.onDblClick=()=>{o?.(),this.dispatchSignal(`${t.id}_${a.sid}_${e}`)};break;case"rightClick":o=a.onRightClick,a.onRightClick=()=>{o?.(),this.dispatchSignal(`${t.id}_${a.sid}_${e}`)}}};let r=[];switch(o){case"model":i.forEach((({sid:t,uuid:a})=>{if(t){const a=e.getObjectById(t);a&&r.push(a)}else r.push(...e.getObjectByUserDataProperty("uuid",a))}));break;case"material":r=e.getObjectByUserDataProperty("familyId",i)}r.forEach((t=>n(t,s))),t.outputs.forEach((e=>{e.data={...a,fromInteraction:!0,eventKey:s,nodeId:t.id},this.parseFlowNode(t,e)}))}},w={async parse({node:t}){const a=JSON.parse(t.config),e=JSON.parse(a.codeString);t.outputs.forEach((a=>{a.data=e,this.parseFlowNode(t,a)}))}},O=t=>t.reduce(((t,a)=>(a.key&&(t[a.key]=a.value),t)),{}),g={async parse({node:e}){const o=JSON.parse(e.config),{address:i,bodies:s,bodyType:n,headers:r,params:c,type:p}=o.requestInfo;let d,l,u;if(c.length>0&&(d=O(c)),s.length>0)if("multipart/form-data"===n){const t=new FormData;s.map((a=>{t.set(a.key,a.value)})),l=t}else l="application/x-www-form-urlencoded"===n?new URLSearchParams(s.map((t=>[t.key,t.value]))):O(s);r.length>0&&(u=O(r));try{const t=await a({method:p,url:i,params:d,data:l,headers:u});e.outputs.forEach((a=>{a.data=t,this.parseFlowNode(e,a)}))}catch(a){t(`flow node "${e.name}" parse error`,a)}}},m={async parse({node:t,inputData:a}){a&&t.outputs.some((e=>{const{config:o}=e,{codeString:i}=JSON.parse(o),s=new Function("sourceData",i)(a);if(s)return e.data=s,this.parseFlowNode(t,e),!0}))}},N={async parse({node:t,inputData:a}){const{filterCode:e}=JSON.parse(t.config),o=new Function("sourceData",e)(a);t.outputs.forEach((a=>{a.data=o,this.parseFlowNode(t,a)}))}};var I;!function(t){t.START="start",t.MODEL="model",t.MATERIAL="material",t.FLOW="flow",t.OBJECT_ANIMATION="objectAnimation",t.OBJECT_POI="objectPoi",t.OBJECT_VIEWPOINT="objectViewpoint",t.SCENE_VIEWPOINT="sceneViewpoint",t.ACTION="action",t.INTERACTION="interaction",t.STATIC_DATA="staticData",t.INTERFACE_DATA="interfaceData",t.CONDITION="condition",t.FILTER="filter",t.VIEWPOINT="viewpoint"}(I||(I={}));const b={model:e,material:o,flow:i,objectAnimation:c,objectPoi:p,objectViewpoint:l,sceneViewpoint:u,action:y,interaction:h,staticData:w,interfaceData:g,condition:m,filter:N,viewpoint:u};export{I as FlowNodeTypesEnum,b as FlowNodesParseMethods,c as ObjectAnimationNodeParseMethods,n as ObjectAnimationPlayState,s as ObjectAnimationType,p as ObjectPoiNodeParseMethods,l as ObjectViewpointNodeParseMethods,d as ObjectViewpointType}; |
{ | ||
"name": "@soonflow/plugin-soonmanager2-node", | ||
"version": "0.1.4", | ||
"version": "0.1.5", | ||
"description": "Soonmanager2 node parsing methods sync plugin for Soonflow", | ||
@@ -22,3 +22,3 @@ "main": "dist/index.esm.js", | ||
}, | ||
"gitHead": "07f4e00e10a096bd5ce7edd0a2a8d70fd6498687" | ||
"gitHead": "04106898cffe41ead317d71bd7a98e5554347633" | ||
} |
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
14995
186