@dlightjs/reactivity-parser
Advanced tools
Comparing version 1.0.0-beta.3 to 1.0.0-beta.4
@@ -76,2 +76,8 @@ import { ViewUnit } from '@dlightjs/view-parser'; | ||
} | ||
interface TryParticle { | ||
type: "try"; | ||
children: ViewParticle[]; | ||
exception: types.Identifier | types.ArrayPattern | types.ObjectPattern | null; | ||
catchChildren: ViewParticle[]; | ||
} | ||
interface EnvParticle { | ||
@@ -93,3 +99,3 @@ type: "env"; | ||
} | ||
type ViewParticle = TemplateParticle | TextParticle | HTMLParticle | CompParticle | ForParticle | IfParticle | EnvParticle | ExpParticle | SwitchParticle | SubviewParticle; | ||
type ViewParticle = TemplateParticle | TextParticle | HTMLParticle | CompParticle | ForParticle | IfParticle | EnvParticle | ExpParticle | SwitchParticle | SubviewParticle | TryParticle; | ||
interface ReactivityParserConfig { | ||
@@ -115,2 +121,2 @@ babelApi: typeof Babel; | ||
export { CompParticle, DependencyProp, DependencyValue, EnvParticle, ExpParticle, ForParticle, HTMLParticle, IfBranch, IfParticle, MutableParticle, ReactivityParserConfig, SubviewParticle, SwitchBranch, SwitchParticle, TemplateParticle, TemplateProp, TextParticle, ViewParticle, parseReactivity }; | ||
export { CompParticle, DependencyProp, DependencyValue, EnvParticle, ExpParticle, ForParticle, HTMLParticle, IfBranch, IfParticle, MutableParticle, ReactivityParserConfig, SubviewParticle, SwitchBranch, SwitchParticle, TemplateParticle, TemplateProp, TextParticle, TryParticle, ViewParticle, parseReactivity }; |
@@ -1,2 +0,2 @@ | ||
var m=Object.defineProperty;var P=(c,e,t)=>e in c?m(c,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[e]=t;var u=(c,e,t)=>(P(c,typeof e!="symbol"?e+"":e,t),t);import{createErrorHandler as g}from"@dlightjs/error-handler";var f=g("ReactivityParser",{1:"Invalid ViewUnit type"});var h=class{config;t;traverse;availableProperties;availableIdentifiers;dependencyMap;identifierDepMap;dependencyParseType;reactivityFuncNames;escapeNamings=["escape","$"];usedProperties=new Set;constructor(e){this.config=e,this.t=e.babelApi.types,this.traverse=e.babelApi.traverse,this.availableProperties=e.availableProperties,this.availableIdentifiers=e.availableIdentifiers,this.dependencyMap=e.dependencyMap,this.identifierDepMap=e.identifierDepMap??{},this.dependencyParseType=e.dependencyParseType??"property",this.reactivityFuncNames=e.reactivityFuncNames??[]}parse(e){return this.parseViewUnit(e)}parseViewUnit(e){return this.isHTMLTemplate(e)?this.parseTemplate(e):e.type==="text"?this.parseText(e):e.type==="html"?this.parseHTML(e):e.type==="comp"?this.parseComp(e):e.type==="for"?this.parseFor(e):e.type==="if"?this.parseIf(e):e.type==="env"?this.parseEnv(e):e.type==="exp"?this.parseExp(e):e.type==="switch"?this.parseSwitch(e):e.type==="subview"?this.parseSubview(e):f.throw1()}parseTemplate(e){return{type:"template",template:this.generateTemplate(e),props:this.parseTemplateProps(e),mutableParticles:this.generateMutableParticles(e)}}generateTemplate(e){let t=this.filterTemplateProps(Object.entries(e.props).filter(([,i])=>this.isStaticProp(i)&&!(this.t.isBooleanLiteral(i.value)&&!i.value.value))).map(([i,n])=>[i,{...n,dependencyIndexArr:[],dependenciesNode:this.t.arrayExpression([]),dynamic:!1}]),r=[];return e.props.textContent||(r=e.children.map(i=>{if(i.type==="html"&&this.t.isStringLiteral(i.tag))return this.generateTemplate(i);if(i.type==="text"&&this.t.isStringLiteral(i.content))return this.parseText(i)}).filter(Boolean)),{type:"html",tag:e.tag,props:Object.fromEntries(t),children:r}}generateMutableParticles(e){let t=[],r=(i,n=[])=>{i.children?.forEach((s,a)=>{!(s.type==="html"&&this.t.isStringLiteral(s.tag))&&!(s.type==="text"&&this.t.isStringLiteral(s.content))&&t.push({path:[...n,a],...this.parseViewParticle(s)})}),i.children?.filter(s=>s.type==="html"&&this.t.isStringLiteral(s.tag)).forEach((s,a)=>{r(s,[...n,a])})};return r(e),t}parseTemplateProps(e){let t=[],r=(i,n)=>{Object.entries(i.props).filter(([,s])=>!this.isStaticProp(s)).forEach(([s,a])=>{t.push({tag:i.tag.value,key:s,path:n,value:a.value,...this.getDependencies(a.value)})}),i.children.filter(s=>s.type==="html"&&this.t.isStringLiteral(s.tag)||s.type==="text"&&this.t.isStringLiteral(s.content)).forEach((s,a)=>{s.type==="html"?r(s,[...n,a]):s.type==="text"&&t.push({tag:"text",key:"value",path:[...n,a],value:s.content,dependencyIndexArr:[],dependenciesNode:this.t.arrayExpression([]),dynamic:!1})})};return r(e,[]),t}parseText(e){return{type:"text",content:{value:e.content,...this.getDependencies(e.content)}}}parseHTML(e){let{dependencyIndexArr:t,dependenciesNode:r,dynamic:i}=this.getDependencies(e.tag),n={type:"html",tag:e.tag,props:{},children:[]};if(n.props=Object.fromEntries(Object.entries(e.props).map(([a,p])=>[a,this.generateDependencyProp(p)])),n.children=e.children.map(this.parseViewParticle.bind(this)),!i)return n;let s=this.uid();return{type:"exp",content:{value:this.t.stringLiteral(s),viewPropMap:{[s]:[n]},dependencyIndexArr:t,dependenciesNode:r,dynamic:i},props:{}}}parseComp(e){let{dependencyIndexArr:t,dependenciesNode:r,dynamic:i}=this.getDependencies(e.tag),n={type:"comp",tag:e.tag,props:{},children:[]};if(n.props=Object.fromEntries(Object.entries(e.props).map(([a,p])=>[a,this.generateDependencyProp(p)])),n.children=e.children.map(this.parseViewParticle.bind(this)),!i)return n;let s=this.uid();return{type:"exp",content:{value:this.t.stringLiteral(s),viewPropMap:{[s]:[n]},dependencyIndexArr:t,dependenciesNode:r,dynamic:i},props:{}}}parseFor(e){let{dependencyIndexArr:t,dependenciesNode:r,dynamic:i}=this.getDependencies(e.array),n=this.config.identifierDepMap,s=this.t.isIdentifier(e.key)&&e.key.name;this.config.identifierDepMap=Object.fromEntries(this.getIdentifiers(this.t.assignmentExpression("=",e.item,this.t.objectExpression([]))).filter(p=>!s||p!==s).map(p=>[p,t.map(d=>this.availableProperties[d])]));let a={type:"for",item:e.item,array:{value:e.array,dynamic:i,dependencyIndexArr:t,dependenciesNode:r},children:e.children.map(this.parseViewParticle.bind(this)),key:e.key};return this.config.identifierDepMap=n,a}parseIf(e){return{type:"if",branches:e.branches.map(t=>({condition:{value:t.condition,...this.getDependencies(t.condition)},children:t.children.map(this.parseViewParticle.bind(this))}))}}parseSwitch(e){return{type:"switch",discriminant:{value:e.discriminant,...this.getDependencies(e.discriminant)},branches:e.branches.map(t=>({case:{value:t.case,...this.getDependencies(t.case)},children:t.children.map(this.parseViewParticle.bind(this)),break:t.break}))}}parseEnv(e){return{type:"env",props:Object.fromEntries(Object.entries(e.props).map(([t,r])=>[t,this.generateDependencyProp(r)])),children:e.children.map(this.parseViewParticle.bind(this))}}parseExp(e){return{type:"exp",content:this.generateDependencyProp(e.content),props:Object.fromEntries(Object.entries(e.props).map(([r,i])=>[r,this.generateDependencyProp(i)]))}}parseSubview(e){let t={type:"subview",tag:e.tag,props:{},children:[]};return e.props&&(t.props=Object.fromEntries(Object.entries(e.props).map(([r,i])=>[r,this.generateDependencyProp(i)]))),e.children&&(t.children=e.children.map(this.parseViewParticle.bind(this))),t}generateDependencyProp(e){return{value:e.value,...this.getDependencies(e.value),viewPropMap:Object.fromEntries(Object.entries(e.viewPropMap).map(([r,i])=>[r,i.map(this.parseViewParticle.bind(this))]))}}getDependencies(e){let[t,r]=this.getIdentifierDependencies(e),[i,n]=this.getPropertyDependencies(e),s=this.dependencyParseType==="identifier"?t:i,a=this.getIdentifierMapDependencies(e),p=[...new Set([...s,...a])],d=[...r,...n];return{dynamic:d.length>0||p.length>0,dependencyIndexArr:p,dependenciesNode:this.t.arrayExpression(d)}}getIdentifierDependencies(e){let t=this.availableIdentifiers??this.availableProperties,r=new Set,i=new Set,n={},s=this.valueWrapper(e);this.traverse(s,{Identifier:p=>{let o=p.node.name;t.includes(o)&&(this.isAssignmentExpressionLeft(p)||this.isAssignmentFunction(p)?i.add(o):this.isStandAloneIdentifier(p)&&!this.isMemberInEscapeFunction(p)&&!this.isMemberInManualFunction(p)&&(r.add(o),this.dependencyMap[o]?.forEach(r.add.bind(r)),n[o]||(n[o]=[]),n[o].push(this.geneDependencyNode(p))))}}),i.forEach(p=>{r.delete(p),delete n[p]});let a=Object.values(n).flat();return a=a.filter((p,d)=>a.findIndex(y=>this.t.isNodesEquivalent(y,p))===d),r.forEach(this.usedProperties.add.bind(this.usedProperties)),[[...r].map(p=>this.availableProperties.indexOf(p)),a]}getPropertyDependencies(e){if(this.t.isFunctionExpression(e)||this.t.isArrowFunctionExpression(e))return[[],[]];let t=new Set,r=new Set,i={},n=this.valueWrapper(e);this.traverse(n,{MemberExpression:a=>{if(!this.t.isIdentifier(a.node.property)||!this.t.isThisExpression(a.node.object))return;let p=a.node.property.name;this.isAssignmentExpressionLeft(a)||this.isAssignmentFunction(a)?r.add(p):this.availableProperties.includes(p)&&!this.isMemberInEscapeFunction(a)&&!this.isMemberInManualFunction(a)&&(t.add(p),this.dependencyMap[p]?.forEach(t.add.bind(t)),i[p]||(i[p]=[]),i[p].push(this.geneDependencyNode(a)))}}),r.forEach(a=>{t.delete(a),delete i[a]});let s=Object.values(i).flat();return s=s.filter((a,p)=>s.findIndex(o=>this.t.isNodesEquivalent(o,a))===p),t.forEach(this.usedProperties.add.bind(this.usedProperties)),[[...t].map(a=>this.availableProperties.indexOf(a)),s]}geneDependencyNode(e){let t=e;for(;t?.parentPath;){let r=t.parentPath;if(!(this.t.isBinaryExpression(r.node)||this.t.isMemberExpression(r.node)))return t.node;t=r}return e.node}getIdentifierMapDependencies(e){let t=new Set,r=this.valueWrapper(e);return this.traverse(r,{Identifier:i=>{let s=i.node.name;if(this.isAttrFromFunction(i,s))return;let a=this.identifierDepMap[s];!a||!Array.isArray(a)||this.isMemberInEscapeFunction(i)||this.isMemberInManualFunction(i)||a.forEach(t.add.bind(t))}}),t.forEach(this.usedProperties.add.bind(this.usedProperties)),[...t].map(i=>this.availableProperties.indexOf(i))}parseViewParticle(e){let t=new h(this.config),r=t.parse(e);return t.usedProperties.forEach(this.usedProperties.add.bind(this.usedProperties)),r}isHTMLTemplate(e){return e.type==="html"&&this.t.isStringLiteral(e.tag)&&!!e.children?.some(t=>t.type==="html"&&this.t.isStringLiteral(t.tag))}isStaticProp(e){let{value:t,viewPropMap:r}=e;return(!r||Object.keys(r).length===0)&&(this.t.isStringLiteral(t)||this.t.isNumericLiteral(t)||this.t.isBooleanLiteral(t))}filterTemplateProps(e){return e.filter(([t])=>!t.startsWith("on")).filter(([t])=>!h.customHTMLProps.includes(t))}valueWrapper(e){return this.t.file(this.t.program([this.t.isStatement(e)?e:this.t.expressionStatement(e)]))}isStandAloneIdentifier(e){let t=e.node,r=e.parentPath?.node;if(this.t.isMemberExpression(r)&&r.property===t||this.isAttrFromFunction(e,t.name))return!1;for(;e.parentPath;){if(this.t.isVariableDeclarator(e.parentPath.node)||this.t.isObjectProperty(e.parentPath.node)&&e.parentPath.node.key===e.node&&!e.parentPath.node.computed)return!1;e=e.parentPath}return!0}getIdentifiers(e){if(this.t.isIdentifier(e))return[e.name];let t=new Set;return this.traverse(this.valueWrapper(e),{Identifier:r=>{this.isStandAloneIdentifier(r)&&t.add(r.node.name)}}),[...t]}isAttrFromFunction(e,t){let r=e.parentPath,i=n=>this.t.isIdentifier(n)?n.name===t:this.t.isAssignmentPattern(n)?i(n.left):this.t.isArrayPattern(n)?n.elements.filter(Boolean).map(s=>i(s)).includes(!0):this.t.isObjectPattern(n)?n.properties.filter(s=>this.t.isObjectProperty(s)&&this.t.isIdentifier(s.key)).map(s=>s.key.name).includes(t):this.t.isRestElement(n)?i(n.argument):!1;for(;r;){let n=r.node;if(this.t.isArrowFunctionExpression(n)||this.t.isFunctionDeclaration(n)){for(let s of n.params)if(i(s))return!0}r=r.parentPath}return!1}isAssignmentExpressionLeft(e){let t=e.parentPath;for(;t&&!this.t.isStatement(t.node);){if(this.t.isAssignmentExpression(t.node)){if(t.node.left===e.node)return!0;let r=t.get("left");if(e.isDescendant(r))return!0}else if(this.t.isUpdateExpression(t.node))return!0;t=t.parentPath}return!1}isAssignmentFunction(e){let t=e.parentPath;for(;t&&this.t.isMemberExpression(t.node);)t=t.parentPath;return t?this.t.isCallExpression(t.node)&&this.t.isMemberExpression(t.node.callee)&&this.t.isIdentifier(t.node.callee.property)&&this.reactivityFuncNames.includes(t.node.callee.property.name):!1}isMemberInEscapeFunction(e){let t=!1,r=e.parentPath;for(;r;){let i=r.node;if(this.t.isCallExpression(i)&&this.t.isIdentifier(i.callee)&&this.escapeNamings.includes(i.callee.name)){t=!0;break}r=r.parentPath}return t}isMemberInManualFunction(e){let t=!1,r=e.parentPath;for(;r;){let i=r.node,n=r.parentPath?.node,s=this.t.isCallExpression(n)&&this.t.isIdentifier(n.callee)&&n.callee.name==="manual",a=this.t.isCallExpression(n)&&n.arguments[0]===i;if(s&&a){t=!0;break}r=r.parentPath}return t}uid(){return Math.random().toString(36).slice(2)}},l=h;u(l,"customHTMLProps",["didUpdate","willMount","didMount","willUnmount","didUnmount","element","innerHTML","prop","attr","dataset","forwardProps"]);function w(c,e){let t=new Set;return[c.map(i=>{let n=new l(e),s=n.parse(i);return n.usedProperties.forEach(t.add.bind(t)),s}),t]}export{w as parseReactivity}; | ||
var m=Object.defineProperty;var P=(c,e,t)=>e in c?m(c,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):c[e]=t;var u=(c,e,t)=>(P(c,typeof e!="symbol"?e+"":e,t),t);import{createErrorHandler as g}from"@dlightjs/error-handler";var y=g("ReactivityParser",{1:"Invalid ViewUnit type"});var h=class{config;t;traverse;availableProperties;availableIdentifiers;dependencyMap;identifierDepMap;dependencyParseType;reactivityFuncNames;escapeNamings=["escape","$"];usedProperties=new Set;constructor(e){this.config=e,this.t=e.babelApi.types,this.traverse=e.babelApi.traverse,this.availableProperties=e.availableProperties,this.availableIdentifiers=e.availableIdentifiers,this.dependencyMap=e.dependencyMap,this.identifierDepMap=e.identifierDepMap??{},this.dependencyParseType=e.dependencyParseType??"property",this.reactivityFuncNames=e.reactivityFuncNames??[]}parse(e){return this.parseViewUnit(e)}parseViewUnit(e){return this.isHTMLTemplate(e)?this.parseTemplate(e):e.type==="text"?this.parseText(e):e.type==="html"?this.parseHTML(e):e.type==="comp"?this.parseComp(e):e.type==="for"?this.parseFor(e):e.type==="try"?this.parseTry(e):e.type==="if"?this.parseIf(e):e.type==="env"?this.parseEnv(e):e.type==="exp"?this.parseExp(e):e.type==="switch"?this.parseSwitch(e):e.type==="subview"?this.parseSubview(e):y.throw1()}parseTemplate(e){return{type:"template",template:this.generateTemplate(e),props:this.parseTemplateProps(e),mutableParticles:this.generateMutableParticles(e)}}generateTemplate(e){let t=this.filterTemplateProps(Object.entries(e.props).filter(([,i])=>this.isStaticProp(i)&&!(this.t.isBooleanLiteral(i.value)&&!i.value.value))).map(([i,n])=>[i,{...n,dependencyIndexArr:[],dependenciesNode:this.t.arrayExpression([]),dynamic:!1}]),r=[];return e.props.textContent||(r=e.children.map(i=>{if(i.type==="html"&&this.t.isStringLiteral(i.tag))return this.generateTemplate(i);if(i.type==="text"&&this.t.isStringLiteral(i.content))return this.parseText(i)}).filter(Boolean)),{type:"html",tag:e.tag,props:Object.fromEntries(t),children:r}}generateMutableParticles(e){let t=[],r=(i,n=[])=>{i.children?.forEach((s,a)=>{!(s.type==="html"&&this.t.isStringLiteral(s.tag))&&!(s.type==="text"&&this.t.isStringLiteral(s.content))&&t.push({path:[...n,a],...this.parseViewParticle(s)})}),i.children?.filter(s=>s.type==="html"&&this.t.isStringLiteral(s.tag)).forEach((s,a)=>{r(s,[...n,a])})};return r(e),t}parseTemplateProps(e){let t=[],r=(i,n)=>{Object.entries(i.props).filter(([,s])=>!this.isStaticProp(s)).forEach(([s,a])=>{t.push({tag:i.tag.value,key:s,path:n,value:a.value,...this.getDependencies(a.value)})}),i.children.filter(s=>s.type==="html"&&this.t.isStringLiteral(s.tag)||s.type==="text"&&this.t.isStringLiteral(s.content)).forEach((s,a)=>{s.type==="html"?r(s,[...n,a]):s.type==="text"&&t.push({tag:"text",key:"value",path:[...n,a],value:s.content,dependencyIndexArr:[],dependenciesNode:this.t.arrayExpression([]),dynamic:!1})})};return r(e,[]),t}parseText(e){return{type:"text",content:{value:e.content,...this.getDependencies(e.content)}}}parseHTML(e){let{dependencyIndexArr:t,dependenciesNode:r,dynamic:i}=this.getDependencies(e.tag),n={type:"html",tag:e.tag,props:{},children:[]};if(n.props=Object.fromEntries(Object.entries(e.props).map(([a,p])=>[a,this.generateDependencyProp(p)])),n.children=e.children.map(this.parseViewParticle.bind(this)),!i)return n;let s=this.uid();return{type:"exp",content:{value:this.t.stringLiteral(s),viewPropMap:{[s]:[n]},dependencyIndexArr:t,dependenciesNode:r,dynamic:i},props:{}}}parseComp(e){let{dependencyIndexArr:t,dependenciesNode:r,dynamic:i}=this.getDependencies(e.tag),n={type:"comp",tag:e.tag,props:{},children:[]};if(n.props=Object.fromEntries(Object.entries(e.props).map(([a,p])=>[a,this.generateDependencyProp(p)])),n.children=e.children.map(this.parseViewParticle.bind(this)),!i)return n;let s=this.uid();return{type:"exp",content:{value:this.t.stringLiteral(s),viewPropMap:{[s]:[n]},dependencyIndexArr:t,dependenciesNode:r,dynamic:i},props:{}}}parseFor(e){let{dependencyIndexArr:t,dependenciesNode:r,dynamic:i}=this.getDependencies(e.array),n=this.config.identifierDepMap,s=this.t.isIdentifier(e.key)&&e.key.name;this.config.identifierDepMap=Object.fromEntries(this.getIdentifiers(this.t.assignmentExpression("=",e.item,this.t.objectExpression([]))).filter(p=>!s||p!==s).map(p=>[p,t.map(d=>this.availableProperties[d])]));let a={type:"for",item:e.item,array:{value:e.array,dynamic:i,dependencyIndexArr:t,dependenciesNode:r},children:e.children.map(this.parseViewParticle.bind(this)),key:e.key};return this.config.identifierDepMap=n,a}parseIf(e){return{type:"if",branches:e.branches.map(t=>({condition:{value:t.condition,...this.getDependencies(t.condition)},children:t.children.map(this.parseViewParticle.bind(this))}))}}parseSwitch(e){return{type:"switch",discriminant:{value:e.discriminant,...this.getDependencies(e.discriminant)},branches:e.branches.map(t=>({case:{value:t.case,...this.getDependencies(t.case)},children:t.children.map(this.parseViewParticle.bind(this)),break:t.break}))}}parseTry(e){return{type:"try",children:e.children.map(this.parseViewParticle.bind(this)),exception:e.exception,catchChildren:e.catchChildren.map(this.parseViewParticle.bind(this))}}parseEnv(e){return{type:"env",props:Object.fromEntries(Object.entries(e.props).map(([t,r])=>[t,this.generateDependencyProp(r)])),children:e.children.map(this.parseViewParticle.bind(this))}}parseExp(e){return{type:"exp",content:this.generateDependencyProp(e.content),props:Object.fromEntries(Object.entries(e.props).map(([r,i])=>[r,this.generateDependencyProp(i)]))}}parseSubview(e){let t={type:"subview",tag:e.tag,props:{},children:[]};return e.props&&(t.props=Object.fromEntries(Object.entries(e.props).map(([r,i])=>[r,this.generateDependencyProp(i)]))),e.children&&(t.children=e.children.map(this.parseViewParticle.bind(this))),t}generateDependencyProp(e){return{value:e.value,...this.getDependencies(e.value),viewPropMap:Object.fromEntries(Object.entries(e.viewPropMap).map(([r,i])=>[r,i.map(this.parseViewParticle.bind(this))]))}}getDependencies(e){if(this.t.isFunctionExpression(e)||this.t.isArrowFunctionExpression(e))return{dynamic:!1,dependencyIndexArr:[],dependenciesNode:this.t.arrayExpression([])};let[t,r]=this.getIdentifierDependencies(e),[i,n]=this.getPropertyDependencies(e),s=this.dependencyParseType==="identifier"?t:i,a=this.getIdentifierMapDependencies(e),p=[...new Set([...s,...a])],d=[...r,...n];return{dynamic:d.length>0||p.length>0,dependencyIndexArr:p,dependenciesNode:this.t.arrayExpression(d)}}getIdentifierDependencies(e){let t=this.availableIdentifiers??this.availableProperties,r=new Set,i=new Set,n={},s=this.valueWrapper(e);this.traverse(s,{Identifier:p=>{let o=p.node.name;t.includes(o)&&(this.isAssignmentExpressionLeft(p)||this.isAssignmentFunction(p)?i.add(o):this.isStandAloneIdentifier(p)&&!this.isMemberInEscapeFunction(p)&&!this.isMemberInManualFunction(p)&&(r.add(o),this.dependencyMap[o]?.forEach(r.add.bind(r)),n[o]||(n[o]=[]),n[o].push(this.geneDependencyNode(p))))}}),i.forEach(p=>{r.delete(p),delete n[p]});let a=Object.values(n).flat();return a=a.filter((p,d)=>a.findIndex(f=>this.t.isNodesEquivalent(f,p))===d),r.forEach(this.usedProperties.add.bind(this.usedProperties)),[[...r].map(p=>this.availableProperties.indexOf(p)),a]}getPropertyDependencies(e){let t=new Set,r=new Set,i={},n=this.valueWrapper(e);this.traverse(n,{MemberExpression:a=>{if(!this.t.isIdentifier(a.node.property)||!this.t.isThisExpression(a.node.object))return;let p=a.node.property.name;this.isAssignmentExpressionLeft(a)||this.isAssignmentFunction(a)?r.add(p):this.availableProperties.includes(p)&&!this.isMemberInEscapeFunction(a)&&!this.isMemberInManualFunction(a)&&(t.add(p),this.dependencyMap[p]?.forEach(t.add.bind(t)),i[p]||(i[p]=[]),i[p].push(this.geneDependencyNode(a)))}}),r.forEach(a=>{t.delete(a),delete i[a]});let s=Object.values(i).flat();return s=s.filter((a,p)=>s.findIndex(o=>this.t.isNodesEquivalent(o,a))===p),t.forEach(this.usedProperties.add.bind(this.usedProperties)),[[...t].map(a=>this.availableProperties.indexOf(a)),s]}geneDependencyNode(e){let t=e;for(;t?.parentPath;){let r=t.parentPath;if(!(this.t.isBinaryExpression(r.node)||this.t.isMemberExpression(r.node)))return t.node;t=r}return e.node}getIdentifierMapDependencies(e){let t=new Set,r=this.valueWrapper(e);return this.traverse(r,{Identifier:i=>{let s=i.node.name;if(this.isAttrFromFunction(i,s))return;let a=this.identifierDepMap[s];!a||!Array.isArray(a)||this.isMemberInEscapeFunction(i)||this.isMemberInManualFunction(i)||a.forEach(t.add.bind(t))}}),t.forEach(this.usedProperties.add.bind(this.usedProperties)),[...t].map(i=>this.availableProperties.indexOf(i))}parseViewParticle(e){let t=new h(this.config),r=t.parse(e);return t.usedProperties.forEach(this.usedProperties.add.bind(this.usedProperties)),r}isHTMLTemplate(e){return e.type==="html"&&this.t.isStringLiteral(e.tag)&&!!e.children?.some(t=>t.type==="html"&&this.t.isStringLiteral(t.tag))}isStaticProp(e){let{value:t,viewPropMap:r}=e;return(!r||Object.keys(r).length===0)&&(this.t.isStringLiteral(t)||this.t.isNumericLiteral(t)||this.t.isBooleanLiteral(t))}filterTemplateProps(e){return e.filter(([t])=>!t.startsWith("on")).filter(([t])=>!h.customHTMLProps.includes(t))}valueWrapper(e){return this.t.file(this.t.program([this.t.isStatement(e)?e:this.t.expressionStatement(e)]))}isStandAloneIdentifier(e){let t=e.node,r=e.parentPath?.node;if(this.t.isMemberExpression(r)&&r.property===t||this.isAttrFromFunction(e,t.name))return!1;for(;e.parentPath;){if(this.t.isVariableDeclarator(e.parentPath.node)||this.t.isObjectProperty(e.parentPath.node)&&e.parentPath.node.key===e.node&&!e.parentPath.node.computed)return!1;e=e.parentPath}return!0}getIdentifiers(e){if(this.t.isIdentifier(e))return[e.name];let t=new Set;return this.traverse(this.valueWrapper(e),{Identifier:r=>{this.isStandAloneIdentifier(r)&&t.add(r.node.name)}}),[...t]}isAttrFromFunction(e,t){let r=e.parentPath,i=n=>this.t.isIdentifier(n)?n.name===t:this.t.isAssignmentPattern(n)?i(n.left):this.t.isArrayPattern(n)?n.elements.filter(Boolean).map(s=>i(s)).includes(!0):this.t.isObjectPattern(n)?n.properties.filter(s=>this.t.isObjectProperty(s)&&this.t.isIdentifier(s.key)).map(s=>s.key.name).includes(t):this.t.isRestElement(n)?i(n.argument):!1;for(;r;){let n=r.node;if(this.t.isArrowFunctionExpression(n)||this.t.isFunctionDeclaration(n)){for(let s of n.params)if(i(s))return!0}r=r.parentPath}return!1}isAssignmentExpressionLeft(e){let t=e.parentPath;for(;t&&!this.t.isStatement(t.node);){if(this.t.isAssignmentExpression(t.node)){if(t.node.left===e.node)return!0;let r=t.get("left");if(e.isDescendant(r))return!0}else if(this.t.isUpdateExpression(t.node))return!0;t=t.parentPath}return!1}isAssignmentFunction(e){let t=e.parentPath;for(;t&&this.t.isMemberExpression(t.node);)t=t.parentPath;return t?this.t.isCallExpression(t.node)&&this.t.isMemberExpression(t.node.callee)&&this.t.isIdentifier(t.node.callee.property)&&this.reactivityFuncNames.includes(t.node.callee.property.name):!1}isMemberInEscapeFunction(e){let t=!1,r=e.parentPath;for(;r;){let i=r.node;if(this.t.isCallExpression(i)&&this.t.isIdentifier(i.callee)&&this.escapeNamings.includes(i.callee.name)){t=!0;break}r=r.parentPath}return t}isMemberInManualFunction(e){let t=!1,r=e.parentPath;for(;r;){let i=r.node,n=r.parentPath?.node,s=this.t.isCallExpression(n)&&this.t.isIdentifier(n.callee)&&n.callee.name==="manual",a=this.t.isCallExpression(n)&&n.arguments[0]===i;if(s&&a){t=!0;break}r=r.parentPath}return t}uid(){return Math.random().toString(36).slice(2)}},l=h;u(l,"customHTMLProps",["didUpdate","willMount","didMount","willUnmount","didUnmount","element","innerHTML","prop","attr","dataset","forwardProps"]);function w(c,e){let t=new Set;return[c.map(i=>{let n=new l(e),s=n.parse(i);return n.usedProperties.forEach(t.add.bind(t)),s}),t]}export{w as parseReactivity}; | ||
//# sourceMappingURL=index.js.map |
{ | ||
"name": "@dlightjs/reactivity-parser", | ||
"version": "1.0.0-beta.3", | ||
"version": "1.0.0-beta.4", | ||
"description": "DLight reactivity parser given View Units", | ||
@@ -30,3 +30,3 @@ "author": { | ||
"@dlightjs/error-handler": "1.0.0-alpha.0", | ||
"@dlightjs/view-parser": "1.0.0-beta.5" | ||
"@dlightjs/view-parser": "1.0.0-beta.6" | ||
}, | ||
@@ -33,0 +33,0 @@ "tsup": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
134581
212
+ Added@dlightjs/view-parser@1.0.0-beta.6(transitive)
- Removed@dlightjs/view-parser@1.0.0-beta.5(transitive)