Advertisement
pvcodes

Untitled

Feb 7th, 2024
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.88 KB | None | 0 0
  1. const usedVariables = {
  2. functions: {
  3. fun1: [],
  4. fun2: ["context.res.fun1"],
  5. fun3: ["context.res.fun1", "context.res.fun2"],
  6. fun4: ["context.vals.var2"],
  7. var1: [],
  8. var2: ["context"],
  9. funIf1: ["context.vals.var1"],
  10. funIf2: ["context.res.funIf1", "context.vals.var1"],
  11. response: ["context.res.fun2"],
  12. cmtnh8O9w: [],
  13. ifcdQKlmk: ["context.vals.var1"],
  14. },
  15. variables: {
  16. context: {
  17. type: "string",
  18. usedInFunctions: ["var2"],
  19. },
  20. "context.res.fun1": {
  21. type: "string",
  22. usedInFunctions: ["fun2", "fun3"],
  23. },
  24. "context.res.fun2": {
  25. type: "string",
  26. usedInFunctions: ["fun3", "response"],
  27. },
  28. "context.vals.var1": {
  29. type: "string",
  30. usedInFunctions: ["ifcdQKlmk", "funIf1", "funIf2"],
  31. },
  32. "context.vals.var2": {
  33. type: "string",
  34. usedInFunctions: ["fun4"],
  35. },
  36. "context.res.funIf1": {
  37. type: "string",
  38. usedInFunctions: ["funIf2"],
  39. },
  40. },
  41. payloadData: {
  42. context: {
  43. res: {
  44. fun1: "your_value_here",
  45. fun2: "your_value_here",
  46. funIf1: "your_value_here",
  47. },
  48. vals: {
  49. var1: "your_value_here",
  50. var2: "your_value_here",
  51. },
  52. },
  53. },
  54. };
  55.  
  56. const json_script = {
  57. order: {
  58. root: [
  59. "fun1",
  60. "fun2",
  61. "var1",
  62. "funIMcyTJ",
  63. "ifcdQKlmk",
  64. "cmtnh8O9w",
  65. "fun3",
  66. "var2",
  67. "fun4",
  68. "var07zmwP",
  69. ],
  70. ifcdQKlmk: ["funIf1", "funIf2"],
  71. },
  72. title: "untitled1",
  73. blocks: {
  74. fun1: {
  75. data: "funcjkJqeufS",
  76. name: "fun1",
  77. type: "function-true",
  78. active: true,
  79. },
  80. fun2: {
  81. data: "funcz2HdqwVZ",
  82. name: "fun2",
  83. type: "function-true",
  84. active: true,
  85. },
  86. fun3: {
  87. data: "funcy271Bf9P",
  88. name: "fun3",
  89. type: "function-true",
  90. active: false,
  91. },
  92. fun4: {
  93. data: "functTGPav6f",
  94. name: "fun4",
  95. type: "function-true",
  96. active: true,
  97. },
  98. var1: {
  99. data: "2",
  100. html: "2",
  101. name: "var1",
  102. type: "variable",
  103. },
  104. var2: {
  105. data: "context",
  106. html: "context",
  107. name: "var2",
  108. type: "variable",
  109. },
  110. funIf1: {
  111. data: "funcyumy9O8K",
  112. name: "funIf1",
  113. type: "function-true",
  114. active: true,
  115. },
  116. funIf2: {
  117. data: "funcgrdMhoNH",
  118. name: "funIf2",
  119. type: "function-true",
  120. active: true,
  121. },
  122. response: {
  123. data: "context?.res?.fun2",
  124. type: "response",
  125. responseType: "custom",
  126. },
  127. cmtnh8O9w: {
  128. data: "this is comment 1",
  129. type: "comment",
  130. isGenerated: true,
  131. },
  132. funIMcyTJ: {
  133. url: "",
  134. data: "funIMcyTJ",
  135. name: "untitled1",
  136. type: "function",
  137. metaData: {},
  138. isDrafted: true,
  139. },
  140. ifcdQKlmk: {
  141. html: "${context?.vals?.var1} === 2 && (5 + 1 > 5)",
  142. type: "ifBlock",
  143. valid: true,
  144. condition: "context?.vals?.var1 === 2 && (5 + 1 > 5)",
  145. },
  146. var07zmwP: {
  147. type: "variable",
  148. name: "untitled2",
  149. data: "",
  150. isDrafted: true,
  151. },
  152. },
  153. version: "1.1.7",
  154. identifier: "scriFj56pbNT",
  155. webhook_type: "add",
  156. };
  157.  
  158. let _dependencyObj = {};
  159.  
  160. const getType = (id) => {
  161. return json_script["blocks"][id]?.type;
  162. };
  163.  
  164. const isSlugActive = (id) => {
  165. if (json_script["blocks"][id]?.active === undefined) return true;
  166. else return json_script["blocks"][id]?.active;
  167. };
  168.  
  169. const addContextDependencies = (id, resultSet) => {
  170. const index = json_script.order.root.indexOf(id);
  171. if (index !== -1) {
  172. for (let i = index - 1; i >= 0; i--) {
  173. const blockId = json_script.order.root[i];
  174. if (isSlugActive(blockId)) {
  175. let dependencyKey;
  176. const blockType = getType(blockId);
  177. switch (blockType) {
  178. case "ifBlock":
  179. dependencyKey = `context.if.${blockId}`;
  180. break;
  181. case "variable":
  182. dependencyKey = `context.vals.${blockId}`;
  183. break;
  184. case "comment":
  185. // Ignore comment blocks
  186. continue;
  187. default:
  188. dependencyKey = `context.res.${blockId}`;
  189. }
  190. resultSet.add(dependencyKey);
  191. }
  192. }
  193. }
  194. };
  195.  
  196. const createDependencyObjForResponse = (id) => {
  197. const key_name = `_response`;
  198. const resultSet = new Set();
  199. const val = usedVariables["functions"][id];
  200. if (val && Array.isArray(val)) {
  201. for (const v of val) {
  202. if (v == "context") {
  203. addContextDependencies(id, resultSet);
  204. continue;
  205. }
  206. const k = v.slice(v.lastIndexOf("."));
  207. if (getType(k) === "variable") {
  208. resultSet.add(`context.vals.${k}`);
  209. } else {
  210. resultSet.add(`context.res.${k}`);
  211. }
  212. }
  213. }
  214. return { [key_name]: resultSet };
  215. };
  216.  
  217. const createDependencyObjForVariable = (id) => {
  218. const key_name = `context.vals.${id}`;
  219. const resultSet = new Set();
  220. const val = usedVariables["functions"][id];
  221. if (val && Array.isArray(val)) {
  222. for (const v of val) {
  223. if (v == "context") {
  224. addContextDependencies(id, resultSet);
  225. continue;
  226. }
  227. const k = v.slice(v.lastIndexOf("."));
  228. if (getType(k) === "variable") {
  229. resultSet.add(`context.vals.${k}`);
  230. } else {
  231. resultSet.add(`context.res.${k}`);
  232. }
  233. }
  234. }
  235. return { [key_name]: resultSet };
  236. };
  237.  
  238. const createDependencyObjForElse = (id) => {
  239. const key_name = `context.res.${id}`;
  240. const resultSet = new Set();
  241. const val = usedVariables["functions"][id];
  242. if (val && Array.isArray(val)) {
  243. for (const v of val) {
  244. if (v == "context") {
  245. addContextDependencies(id, resultSet);
  246. continue;
  247. }
  248. const k = v.slice(v.lastIndexOf("."));
  249. if (getType(k) === "variable") {
  250. resultSet.add(`context.vals.${k}`);
  251. } else {
  252. resultSet.add(`context.res.${k}`);
  253. }
  254. }
  255. }
  256. return { [key_name]: resultSet };
  257. };
  258.  
  259. const createDependencyObjForIfBlock = (id) => {
  260. const key_name = `context.if.${id}`;
  261. const resultSet = new Set();
  262. const val = usedVariables["functions"][id];
  263. if (val && Array.isArray(val)) {
  264. for (const v of val) {
  265. if (v == "context") {
  266. addContextDependencies(id, resultSet);
  267. continue;
  268. }
  269. const k = v.slice(v.lastIndexOf("."));
  270. if (getType(k) === "variable") {
  271. if (!_dependencyObj[v]) {
  272. createDependencyObjForVariable(k);
  273. }
  274. resultSet.add(`context.vals.${k}`);
  275. } else {
  276. resultSet.add(`context.res.${k}`);
  277. }
  278. }
  279. }
  280. return { [key_name]: resultSet };
  281. };
  282.  
  283. const createDependencyObj = () => {
  284. for (const key of Object.keys(usedVariables["functions"])) {
  285. if (isSlugActive(key)) {
  286. if (getType(key) === "ifBlock") {
  287. _dependencyObj = {
  288. ..._dependencyObj,
  289. ...createDependencyObjForIfBlock(key),
  290. };
  291. } else if (getType(key) === "comment") {
  292. continue;
  293. } else if (getType(key) === "response") {
  294. _dependencyObj = {
  295. ..._dependencyObj,
  296. ...createDependencyObjForResponse(key),
  297. };
  298. } else if (getType(key) === "variable") {
  299. _dependencyObj = {
  300. ..._dependencyObj,
  301. ...createDependencyObjForVariable(key),
  302. };
  303. } else {
  304. _dependencyObj = {
  305. ..._dependencyObj,
  306. ...createDependencyObjForElse(key),
  307. };
  308. }
  309. }
  310. }
  311. return _dependencyObj;
  312. };
  313.  
  314. const x = createDependencyObj();
  315. console.log(x);
  316.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement