@hashgraphonline/standards-sdk 0.1.143 → 0.1.144-feat-solana-register.canary.5001619.81

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.
Files changed (475) hide show
  1. package/dist/cjs/hcs-10/base-client.d.ts.map +1 -1
  2. package/dist/cjs/hcs-10/sdk.d.ts +8 -0
  3. package/dist/cjs/hcs-10/sdk.d.ts.map +1 -1
  4. package/dist/cjs/hcs-11/client.d.ts +2 -2
  5. package/dist/cjs/hcs-11/client.d.ts.map +1 -1
  6. package/dist/cjs/hcs-11/person-builder.d.ts +1 -0
  7. package/dist/cjs/hcs-11/person-builder.d.ts.map +1 -1
  8. package/dist/cjs/hcs-11/types.d.ts +1 -0
  9. package/dist/cjs/hcs-11/types.d.ts.map +1 -1
  10. package/dist/cjs/hcs-12/rendering/resource-manager.d.ts.map +1 -1
  11. package/dist/cjs/hcs-12/validation/schemas.d.ts +8 -8
  12. package/dist/cjs/hcs-14/issuers/hiero.d.ts.map +1 -1
  13. package/dist/cjs/hcs-15/browser.d.ts +2 -0
  14. package/dist/cjs/hcs-15/browser.d.ts.map +1 -1
  15. package/dist/cjs/hcs-15/sdk.d.ts +7 -1
  16. package/dist/cjs/hcs-15/sdk.d.ts.map +1 -1
  17. package/dist/cjs/hcs-15/tx.d.ts +4 -0
  18. package/dist/cjs/hcs-15/tx.d.ts.map +1 -1
  19. package/dist/cjs/hcs-15/types.d.ts +16 -1
  20. package/dist/cjs/hcs-15/types.d.ts.map +1 -1
  21. package/dist/cjs/hcs-16/browser.d.ts +11 -2
  22. package/dist/cjs/hcs-16/browser.d.ts.map +1 -1
  23. package/dist/cjs/hcs-16/sdk.d.ts +62 -1
  24. package/dist/cjs/hcs-16/sdk.d.ts.map +1 -1
  25. package/dist/cjs/hcs-16/tx.d.ts +21 -3
  26. package/dist/cjs/hcs-16/tx.d.ts.map +1 -1
  27. package/dist/cjs/hcs-17/base-client.d.ts +1 -0
  28. package/dist/cjs/hcs-17/base-client.d.ts.map +1 -1
  29. package/dist/cjs/hcs-17/sdk.d.ts.map +1 -1
  30. package/dist/cjs/hcs-17/tx.d.ts +2 -0
  31. package/dist/cjs/hcs-17/tx.d.ts.map +1 -1
  32. package/dist/cjs/hcs-17/types.d.ts +4 -0
  33. package/dist/cjs/hcs-17/types.d.ts.map +1 -1
  34. package/dist/cjs/hcs-21/types.d.ts +75 -75
  35. package/dist/cjs/index.d.ts.map +1 -1
  36. package/dist/cjs/services/registry-broker/client/adapters.d.ts +20 -0
  37. package/dist/cjs/services/registry-broker/client/adapters.d.ts.map +1 -0
  38. package/dist/cjs/services/registry-broker/client/agents.d.ts +16 -0
  39. package/dist/cjs/services/registry-broker/client/agents.d.ts.map +1 -0
  40. package/dist/cjs/services/registry-broker/client/base-client.d.ts +70 -0
  41. package/dist/cjs/services/registry-broker/client/base-client.d.ts.map +1 -0
  42. package/dist/cjs/services/registry-broker/client/chat-history.d.ts +23 -0
  43. package/dist/cjs/services/registry-broker/client/chat-history.d.ts.map +1 -0
  44. package/dist/cjs/services/registry-broker/client/chat.d.ts +33 -0
  45. package/dist/cjs/services/registry-broker/client/chat.d.ts.map +1 -0
  46. package/dist/cjs/services/registry-broker/client/credits.d.ts +40 -0
  47. package/dist/cjs/services/registry-broker/client/credits.d.ts.map +1 -0
  48. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts +35 -0
  49. package/dist/cjs/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -0
  50. package/dist/cjs/services/registry-broker/client/encryption.d.ts +33 -0
  51. package/dist/cjs/services/registry-broker/client/encryption.d.ts.map +1 -0
  52. package/dist/cjs/services/registry-broker/client/errors.d.ts +19 -0
  53. package/dist/cjs/services/registry-broker/client/errors.d.ts.map +1 -0
  54. package/dist/cjs/services/registry-broker/client/feedback.d.ts +2 -0
  55. package/dist/cjs/services/registry-broker/client/feedback.d.ts.map +1 -0
  56. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts +10 -0
  57. package/dist/cjs/services/registry-broker/client/ledger-auth.d.ts.map +1 -0
  58. package/dist/cjs/services/registry-broker/client/search.d.ts +19 -0
  59. package/dist/cjs/services/registry-broker/client/search.d.ts.map +1 -0
  60. package/dist/cjs/services/registry-broker/client/utils.d.ts +21 -0
  61. package/dist/cjs/services/registry-broker/client/utils.d.ts.map +1 -0
  62. package/dist/cjs/services/registry-broker/client.d.ts +2 -205
  63. package/dist/cjs/services/registry-broker/client.d.ts.map +1 -1
  64. package/dist/cjs/services/registry-broker/private-key-signer.d.ts +1 -0
  65. package/dist/cjs/services/registry-broker/private-key-signer.d.ts.map +1 -1
  66. package/dist/cjs/services/registry-broker/schemas.d.ts +2509 -816
  67. package/dist/cjs/services/registry-broker/schemas.d.ts.map +1 -1
  68. package/dist/cjs/services/registry-broker/types.d.ts +64 -2
  69. package/dist/cjs/services/registry-broker/types.d.ts.map +1 -1
  70. package/dist/cjs/standards-sdk.cjs +3 -3
  71. package/dist/cjs/standards-sdk.cjs.map +1 -1
  72. package/dist/cjs/utils/crypto-abstraction.d.ts.map +1 -1
  73. package/dist/cjs/utils/crypto-env.d.ts.map +1 -1
  74. package/dist/cjs/utils/dynamic-import.d.ts +5 -1
  75. package/dist/cjs/utils/dynamic-import.d.ts.map +1 -1
  76. package/dist/cjs/utils/hash-adapter.d.ts.map +1 -1
  77. package/dist/es/hcs-10/base-client.d.ts.map +1 -1
  78. package/dist/es/hcs-10/sdk.d.ts +8 -0
  79. package/dist/es/hcs-10/sdk.d.ts.map +1 -1
  80. package/dist/es/hcs-11/client.d.ts +2 -2
  81. package/dist/es/hcs-11/client.d.ts.map +1 -1
  82. package/dist/es/hcs-11/person-builder.d.ts +1 -0
  83. package/dist/es/hcs-11/person-builder.d.ts.map +1 -1
  84. package/dist/es/hcs-11/types.d.ts +1 -0
  85. package/dist/es/hcs-11/types.d.ts.map +1 -1
  86. package/dist/es/hcs-12/rendering/resource-manager.d.ts.map +1 -1
  87. package/dist/es/hcs-12/validation/schemas.d.ts +8 -8
  88. package/dist/es/hcs-14/issuers/hiero.d.ts.map +1 -1
  89. package/dist/es/hcs-15/browser.d.ts +2 -0
  90. package/dist/es/hcs-15/browser.d.ts.map +1 -1
  91. package/dist/es/hcs-15/sdk.d.ts +7 -1
  92. package/dist/es/hcs-15/sdk.d.ts.map +1 -1
  93. package/dist/es/hcs-15/tx.d.ts +4 -0
  94. package/dist/es/hcs-15/tx.d.ts.map +1 -1
  95. package/dist/es/hcs-15/types.d.ts +16 -1
  96. package/dist/es/hcs-15/types.d.ts.map +1 -1
  97. package/dist/es/hcs-16/browser.d.ts +11 -2
  98. package/dist/es/hcs-16/browser.d.ts.map +1 -1
  99. package/dist/es/hcs-16/sdk.d.ts +62 -1
  100. package/dist/es/hcs-16/sdk.d.ts.map +1 -1
  101. package/dist/es/hcs-16/tx.d.ts +21 -3
  102. package/dist/es/hcs-16/tx.d.ts.map +1 -1
  103. package/dist/es/hcs-17/base-client.d.ts +1 -0
  104. package/dist/es/hcs-17/base-client.d.ts.map +1 -1
  105. package/dist/es/hcs-17/sdk.d.ts.map +1 -1
  106. package/dist/es/hcs-17/tx.d.ts +2 -0
  107. package/dist/es/hcs-17/tx.d.ts.map +1 -1
  108. package/dist/es/hcs-17/types.d.ts +4 -0
  109. package/dist/es/hcs-17/types.d.ts.map +1 -1
  110. package/dist/es/hcs-21/types.d.ts +75 -75
  111. package/dist/es/index.d.ts.map +1 -1
  112. package/dist/es/services/registry-broker/client/adapters.d.ts +20 -0
  113. package/dist/es/services/registry-broker/client/adapters.d.ts.map +1 -0
  114. package/dist/es/services/registry-broker/client/agents.d.ts +16 -0
  115. package/dist/es/services/registry-broker/client/agents.d.ts.map +1 -0
  116. package/dist/es/services/registry-broker/client/base-client.d.ts +70 -0
  117. package/dist/es/services/registry-broker/client/base-client.d.ts.map +1 -0
  118. package/dist/es/services/registry-broker/client/chat-history.d.ts +23 -0
  119. package/dist/es/services/registry-broker/client/chat-history.d.ts.map +1 -0
  120. package/dist/es/services/registry-broker/client/chat.d.ts +33 -0
  121. package/dist/es/services/registry-broker/client/chat.d.ts.map +1 -0
  122. package/dist/es/services/registry-broker/client/credits.d.ts +40 -0
  123. package/dist/es/services/registry-broker/client/credits.d.ts.map +1 -0
  124. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts +35 -0
  125. package/dist/es/services/registry-broker/client/encrypted-chat-manager.d.ts.map +1 -0
  126. package/dist/es/services/registry-broker/client/encryption.d.ts +33 -0
  127. package/dist/es/services/registry-broker/client/encryption.d.ts.map +1 -0
  128. package/dist/es/services/registry-broker/client/errors.d.ts +19 -0
  129. package/dist/es/services/registry-broker/client/errors.d.ts.map +1 -0
  130. package/dist/es/services/registry-broker/client/feedback.d.ts +2 -0
  131. package/dist/es/services/registry-broker/client/feedback.d.ts.map +1 -0
  132. package/dist/es/services/registry-broker/client/ledger-auth.d.ts +10 -0
  133. package/dist/es/services/registry-broker/client/ledger-auth.d.ts.map +1 -0
  134. package/dist/es/services/registry-broker/client/search.d.ts +19 -0
  135. package/dist/es/services/registry-broker/client/search.d.ts.map +1 -0
  136. package/dist/es/services/registry-broker/client/utils.d.ts +21 -0
  137. package/dist/es/services/registry-broker/client/utils.d.ts.map +1 -0
  138. package/dist/es/services/registry-broker/client.d.ts +2 -205
  139. package/dist/es/services/registry-broker/client.d.ts.map +1 -1
  140. package/dist/es/services/registry-broker/private-key-signer.d.ts +1 -0
  141. package/dist/es/services/registry-broker/private-key-signer.d.ts.map +1 -1
  142. package/dist/es/services/registry-broker/schemas.d.ts +2509 -816
  143. package/dist/es/services/registry-broker/schemas.d.ts.map +1 -1
  144. package/dist/es/services/registry-broker/types.d.ts +64 -2
  145. package/dist/es/services/registry-broker/types.d.ts.map +1 -1
  146. package/dist/es/standards-sdk.es.js +148 -133
  147. package/dist/es/standards-sdk.es.js.map +1 -1
  148. package/dist/es/standards-sdk.es10.js +70 -90
  149. package/dist/es/standards-sdk.es10.js.map +1 -1
  150. package/dist/es/standards-sdk.es100.js +229 -26
  151. package/dist/es/standards-sdk.es100.js.map +1 -1
  152. package/dist/es/standards-sdk.es101.js +109 -228
  153. package/dist/es/standards-sdk.es101.js.map +1 -1
  154. package/dist/es/standards-sdk.es102.js +15 -94
  155. package/dist/es/standards-sdk.es102.js.map +1 -1
  156. package/dist/es/standards-sdk.es103.js +80 -30
  157. package/dist/es/standards-sdk.es103.js.map +1 -1
  158. package/dist/es/standards-sdk.es104.js +27 -80
  159. package/dist/es/standards-sdk.es104.js.map +1 -1
  160. package/dist/es/standards-sdk.es105.js +136 -25
  161. package/dist/es/standards-sdk.es105.js.map +1 -1
  162. package/dist/es/standards-sdk.es106.js +27 -140
  163. package/dist/es/standards-sdk.es106.js.map +1 -1
  164. package/dist/es/standards-sdk.es107.js +20 -27
  165. package/dist/es/standards-sdk.es107.js.map +1 -1
  166. package/dist/es/standards-sdk.es108.js +156 -18
  167. package/dist/es/standards-sdk.es108.js.map +1 -1
  168. package/dist/es/standards-sdk.es109.js +198 -148
  169. package/dist/es/standards-sdk.es109.js.map +1 -1
  170. package/dist/es/standards-sdk.es11.js +121 -45
  171. package/dist/es/standards-sdk.es11.js.map +1 -1
  172. package/dist/es/standards-sdk.es110.js +747 -160
  173. package/dist/es/standards-sdk.es110.js.map +1 -1
  174. package/dist/es/standards-sdk.es111.js +9 -786
  175. package/dist/es/standards-sdk.es111.js.map +1 -1
  176. package/dist/es/standards-sdk.es112.js +567 -13
  177. package/dist/es/standards-sdk.es112.js.map +1 -1
  178. package/dist/es/standards-sdk.es113.js +576 -541
  179. package/dist/es/standards-sdk.es113.js.map +1 -1
  180. package/dist/es/standards-sdk.es114.js +12 -601
  181. package/dist/es/standards-sdk.es114.js.map +1 -1
  182. package/dist/es/standards-sdk.es115.js +2 -13
  183. package/dist/es/standards-sdk.es115.js.map +1 -1
  184. package/dist/es/standards-sdk.es116.js +87 -2
  185. package/dist/es/standards-sdk.es116.js.map +1 -1
  186. package/dist/es/standards-sdk.es117.js +37 -80
  187. package/dist/es/standards-sdk.es117.js.map +1 -1
  188. package/dist/es/standards-sdk.es118.js +2 -39
  189. package/dist/es/standards-sdk.es118.js.map +1 -1
  190. package/dist/es/standards-sdk.es119.js +231 -2
  191. package/dist/es/standards-sdk.es119.js.map +1 -1
  192. package/dist/es/standards-sdk.es12.js +60 -159
  193. package/dist/es/standards-sdk.es12.js.map +1 -1
  194. package/dist/es/standards-sdk.es120.js +1110 -193
  195. package/dist/es/standards-sdk.es120.js.map +1 -1
  196. package/dist/es/standards-sdk.es121.js +225 -1059
  197. package/dist/es/standards-sdk.es121.js.map +1 -1
  198. package/dist/es/standards-sdk.es122.js +419 -303
  199. package/dist/es/standards-sdk.es122.js.map +1 -1
  200. package/dist/es/standards-sdk.es123.js +351 -418
  201. package/dist/es/standards-sdk.es123.js.map +1 -1
  202. package/dist/es/standards-sdk.es124.js +872 -347
  203. package/dist/es/standards-sdk.es124.js.map +1 -1
  204. package/dist/es/standards-sdk.es125.js +182 -854
  205. package/dist/es/standards-sdk.es125.js.map +1 -1
  206. package/dist/es/standards-sdk.es126.js +1512 -153
  207. package/dist/es/standards-sdk.es126.js.map +1 -1
  208. package/dist/es/standards-sdk.es127.js +157 -1547
  209. package/dist/es/standards-sdk.es127.js.map +1 -1
  210. package/dist/es/standards-sdk.es128.js +184 -2190
  211. package/dist/es/standards-sdk.es128.js.map +1 -1
  212. package/dist/es/standards-sdk.es129.js +100 -63
  213. package/dist/es/standards-sdk.es129.js.map +1 -1
  214. package/dist/es/standards-sdk.es13.js +200 -60
  215. package/dist/es/standards-sdk.es13.js.map +1 -1
  216. package/dist/es/standards-sdk.es130.js +112 -78
  217. package/dist/es/standards-sdk.es130.js.map +1 -1
  218. package/dist/es/standards-sdk.es131.js +232 -144
  219. package/dist/es/standards-sdk.es131.js.map +1 -1
  220. package/dist/es/standards-sdk.es132.js +181 -8
  221. package/dist/es/standards-sdk.es132.js.map +1 -1
  222. package/dist/es/standards-sdk.es133.js +118 -82
  223. package/dist/es/standards-sdk.es133.js.map +1 -1
  224. package/dist/es/standards-sdk.es134.js +322 -61
  225. package/dist/es/standards-sdk.es134.js.map +1 -1
  226. package/dist/es/standards-sdk.es135.js +464 -28
  227. package/dist/es/standards-sdk.es135.js.map +1 -1
  228. package/dist/es/standards-sdk.es136.js +14 -135
  229. package/dist/es/standards-sdk.es136.js.map +1 -1
  230. package/dist/es/standards-sdk.es137.js +78 -39
  231. package/dist/es/standards-sdk.es137.js.map +1 -1
  232. package/dist/es/standards-sdk.es138.js +85 -764
  233. package/dist/es/standards-sdk.es138.js.map +1 -1
  234. package/dist/es/standards-sdk.es139.js +135 -12250
  235. package/dist/es/standards-sdk.es139.js.map +1 -1
  236. package/dist/es/standards-sdk.es14.js +149 -178
  237. package/dist/es/standards-sdk.es14.js.map +1 -1
  238. package/dist/es/standards-sdk.es140.js +7 -56
  239. package/dist/es/standards-sdk.es140.js.map +1 -1
  240. package/dist/es/standards-sdk.es141.js +72 -68
  241. package/dist/es/standards-sdk.es141.js.map +1 -1
  242. package/dist/es/standards-sdk.es142.js +61 -13
  243. package/dist/es/standards-sdk.es142.js.map +1 -1
  244. package/dist/es/standards-sdk.es143.js +30 -172
  245. package/dist/es/standards-sdk.es143.js.map +1 -1
  246. package/dist/es/standards-sdk.es144.js +34 -322
  247. package/dist/es/standards-sdk.es144.js.map +1 -1
  248. package/dist/es/standards-sdk.es145.js +28 -346
  249. package/dist/es/standards-sdk.es145.js.map +1 -1
  250. package/dist/es/standards-sdk.es146.js +112 -427
  251. package/dist/es/standards-sdk.es146.js.map +1 -1
  252. package/dist/es/standards-sdk.es147.js +40 -329
  253. package/dist/es/standards-sdk.es147.js.map +1 -1
  254. package/dist/es/standards-sdk.es148.js +958 -76
  255. package/dist/es/standards-sdk.es148.js.map +1 -1
  256. package/dist/es/standards-sdk.es149.js +12292 -0
  257. package/dist/es/standards-sdk.es149.js.map +1 -0
  258. package/dist/es/standards-sdk.es15.js +152 -151
  259. package/dist/es/standards-sdk.es15.js.map +1 -1
  260. package/dist/es/standards-sdk.es150.js +59 -0
  261. package/dist/es/standards-sdk.es150.js.map +1 -0
  262. package/dist/es/standards-sdk.es151.js +87 -0
  263. package/dist/es/standards-sdk.es151.js.map +1 -0
  264. package/dist/es/standards-sdk.es152.js +20 -0
  265. package/dist/es/standards-sdk.es152.js.map +1 -0
  266. package/dist/es/standards-sdk.es153.js +175 -0
  267. package/dist/es/standards-sdk.es153.js.map +1 -0
  268. package/dist/es/standards-sdk.es154.js +325 -0
  269. package/dist/es/standards-sdk.es154.js.map +1 -0
  270. package/dist/es/standards-sdk.es155.js +349 -0
  271. package/dist/es/standards-sdk.es155.js.map +1 -0
  272. package/dist/es/standards-sdk.es156.js +456 -0
  273. package/dist/es/standards-sdk.es156.js.map +1 -0
  274. package/dist/es/standards-sdk.es157.js +334 -0
  275. package/dist/es/standards-sdk.es157.js.map +1 -0
  276. package/dist/es/standards-sdk.es158.js +79 -0
  277. package/dist/es/standards-sdk.es158.js.map +1 -0
  278. package/dist/es/standards-sdk.es159.js +242 -0
  279. package/dist/es/standards-sdk.es159.js.map +1 -0
  280. package/dist/es/standards-sdk.es16.js +917 -136
  281. package/dist/es/standards-sdk.es16.js.map +1 -1
  282. package/dist/es/standards-sdk.es160.js +247 -0
  283. package/dist/es/standards-sdk.es160.js.map +1 -0
  284. package/dist/es/standards-sdk.es17.js +23 -938
  285. package/dist/es/standards-sdk.es17.js.map +1 -1
  286. package/dist/es/standards-sdk.es18.js +2422 -24
  287. package/dist/es/standards-sdk.es18.js.map +1 -1
  288. package/dist/es/standards-sdk.es19.js +826 -2075
  289. package/dist/es/standards-sdk.es19.js.map +1 -1
  290. package/dist/es/standards-sdk.es2.js +654 -189
  291. package/dist/es/standards-sdk.es2.js.map +1 -1
  292. package/dist/es/standards-sdk.es20.js +205 -1086
  293. package/dist/es/standards-sdk.es20.js.map +1 -1
  294. package/dist/es/standards-sdk.es21.js +858 -221
  295. package/dist/es/standards-sdk.es21.js.map +1 -1
  296. package/dist/es/standards-sdk.es22.js +179 -903
  297. package/dist/es/standards-sdk.es22.js.map +1 -1
  298. package/dist/es/standards-sdk.es23.js +164 -179
  299. package/dist/es/standards-sdk.es23.js.map +1 -1
  300. package/dist/es/standards-sdk.es24.js +62 -118
  301. package/dist/es/standards-sdk.es24.js.map +1 -1
  302. package/dist/es/standards-sdk.es25.js +377 -52
  303. package/dist/es/standards-sdk.es25.js.map +1 -1
  304. package/dist/es/standards-sdk.es26.js +36 -394
  305. package/dist/es/standards-sdk.es26.js.map +1 -1
  306. package/dist/es/standards-sdk.es27.js +901 -50
  307. package/dist/es/standards-sdk.es27.js.map +1 -1
  308. package/dist/es/standards-sdk.es28.js +134 -897
  309. package/dist/es/standards-sdk.es28.js.map +1 -1
  310. package/dist/es/standards-sdk.es29.js +7 -134
  311. package/dist/es/standards-sdk.es29.js.map +1 -1
  312. package/dist/es/standards-sdk.es3.js +63 -680
  313. package/dist/es/standards-sdk.es3.js.map +1 -1
  314. package/dist/es/standards-sdk.es30.js +344 -7
  315. package/dist/es/standards-sdk.es30.js.map +1 -1
  316. package/dist/es/standards-sdk.es31.js +302 -287
  317. package/dist/es/standards-sdk.es31.js.map +1 -1
  318. package/dist/es/standards-sdk.es32.js +94 -322
  319. package/dist/es/standards-sdk.es32.js.map +1 -1
  320. package/dist/es/standards-sdk.es33.js +458 -101
  321. package/dist/es/standards-sdk.es33.js.map +1 -1
  322. package/dist/es/standards-sdk.es34.js +132 -451
  323. package/dist/es/standards-sdk.es34.js.map +1 -1
  324. package/dist/es/standards-sdk.es35.js +216 -130
  325. package/dist/es/standards-sdk.es35.js.map +1 -1
  326. package/dist/es/standards-sdk.es36.js +274 -191
  327. package/dist/es/standards-sdk.es36.js.map +1 -1
  328. package/dist/es/standards-sdk.es37.js +148 -87
  329. package/dist/es/standards-sdk.es37.js.map +1 -1
  330. package/dist/es/standards-sdk.es38.js +183 -320
  331. package/dist/es/standards-sdk.es38.js.map +1 -1
  332. package/dist/es/standards-sdk.es39.js +238 -161
  333. package/dist/es/standards-sdk.es39.js.map +1 -1
  334. package/dist/es/standards-sdk.es4.js +425 -63
  335. package/dist/es/standards-sdk.es4.js.map +1 -1
  336. package/dist/es/standards-sdk.es40.js +136 -254
  337. package/dist/es/standards-sdk.es40.js.map +1 -1
  338. package/dist/es/standards-sdk.es41.js +225 -176
  339. package/dist/es/standards-sdk.es41.js.map +1 -1
  340. package/dist/es/standards-sdk.es42.js +199 -261
  341. package/dist/es/standards-sdk.es42.js.map +1 -1
  342. package/dist/es/standards-sdk.es43.js +237 -199
  343. package/dist/es/standards-sdk.es43.js.map +1 -1
  344. package/dist/es/standards-sdk.es44.js +209 -201
  345. package/dist/es/standards-sdk.es44.js.map +1 -1
  346. package/dist/es/standards-sdk.es45.js +305 -201
  347. package/dist/es/standards-sdk.es45.js.map +1 -1
  348. package/dist/es/standards-sdk.es46.js +371 -261
  349. package/dist/es/standards-sdk.es46.js.map +1 -1
  350. package/dist/es/standards-sdk.es47.js +316 -371
  351. package/dist/es/standards-sdk.es47.js.map +1 -1
  352. package/dist/es/standards-sdk.es48.js +404 -336
  353. package/dist/es/standards-sdk.es48.js.map +1 -1
  354. package/dist/es/standards-sdk.es49.js +83 -449
  355. package/dist/es/standards-sdk.es49.js.map +1 -1
  356. package/dist/es/standards-sdk.es5.js +232 -354
  357. package/dist/es/standards-sdk.es5.js.map +1 -1
  358. package/dist/es/standards-sdk.es50.js +179 -89
  359. package/dist/es/standards-sdk.es50.js.map +1 -1
  360. package/dist/es/standards-sdk.es51.js +231 -165
  361. package/dist/es/standards-sdk.es51.js.map +1 -1
  362. package/dist/es/standards-sdk.es52.js +25 -262
  363. package/dist/es/standards-sdk.es52.js.map +1 -1
  364. package/dist/es/standards-sdk.es53.js +56 -26
  365. package/dist/es/standards-sdk.es53.js.map +1 -1
  366. package/dist/es/standards-sdk.es54.js +12 -57
  367. package/dist/es/standards-sdk.es54.js.map +1 -1
  368. package/dist/es/standards-sdk.es55.js +49 -12
  369. package/dist/es/standards-sdk.es55.js.map +1 -1
  370. package/dist/es/standards-sdk.es56.js +115 -43
  371. package/dist/es/standards-sdk.es56.js.map +1 -1
  372. package/dist/es/standards-sdk.es57.js +42 -115
  373. package/dist/es/standards-sdk.es57.js.map +1 -1
  374. package/dist/es/standards-sdk.es58.js +52 -43
  375. package/dist/es/standards-sdk.es58.js.map +1 -1
  376. package/dist/es/standards-sdk.es59.js +36 -50
  377. package/dist/es/standards-sdk.es59.js.map +1 -1
  378. package/dist/es/standards-sdk.es6.js +125 -246
  379. package/dist/es/standards-sdk.es6.js.map +1 -1
  380. package/dist/es/standards-sdk.es60.js +207 -39
  381. package/dist/es/standards-sdk.es60.js.map +1 -1
  382. package/dist/es/standards-sdk.es61.js +24 -195
  383. package/dist/es/standards-sdk.es61.js.map +1 -1
  384. package/dist/es/standards-sdk.es62.js +87 -25
  385. package/dist/es/standards-sdk.es62.js.map +1 -1
  386. package/dist/es/standards-sdk.es63.js +3 -51
  387. package/dist/es/standards-sdk.es63.js.map +1 -1
  388. package/dist/es/standards-sdk.es64.js +100 -3
  389. package/dist/es/standards-sdk.es64.js.map +1 -1
  390. package/dist/es/standards-sdk.es65.js +61 -62
  391. package/dist/es/standards-sdk.es65.js.map +1 -1
  392. package/dist/es/standards-sdk.es66.js +17 -98
  393. package/dist/es/standards-sdk.es66.js.map +1 -1
  394. package/dist/es/standards-sdk.es67.js +77 -19
  395. package/dist/es/standards-sdk.es67.js.map +1 -1
  396. package/dist/es/standards-sdk.es68.js +458 -77
  397. package/dist/es/standards-sdk.es68.js.map +1 -1
  398. package/dist/es/standards-sdk.es69.js +106 -240
  399. package/dist/es/standards-sdk.es69.js.map +1 -1
  400. package/dist/es/standards-sdk.es7.js +28 -183
  401. package/dist/es/standards-sdk.es7.js.map +1 -1
  402. package/dist/es/standards-sdk.es70.js +170 -286
  403. package/dist/es/standards-sdk.es70.js.map +1 -1
  404. package/dist/es/standards-sdk.es71.js +71 -207
  405. package/dist/es/standards-sdk.es71.js.map +1 -1
  406. package/dist/es/standards-sdk.es72.js +71 -72
  407. package/dist/es/standards-sdk.es72.js.map +1 -1
  408. package/dist/es/standards-sdk.es73.js +143 -71
  409. package/dist/es/standards-sdk.es73.js.map +1 -1
  410. package/dist/es/standards-sdk.es74.js +62 -136
  411. package/dist/es/standards-sdk.es74.js.map +1 -1
  412. package/dist/es/standards-sdk.es75.js +380 -45
  413. package/dist/es/standards-sdk.es75.js.map +1 -1
  414. package/dist/es/standards-sdk.es76.js +222 -130
  415. package/dist/es/standards-sdk.es76.js.map +1 -1
  416. package/dist/es/standards-sdk.es77.js +320 -444
  417. package/dist/es/standards-sdk.es77.js.map +1 -1
  418. package/dist/es/standards-sdk.es78.js +88 -364
  419. package/dist/es/standards-sdk.es78.js.map +1 -1
  420. package/dist/es/standards-sdk.es79.js +125 -89
  421. package/dist/es/standards-sdk.es79.js.map +1 -1
  422. package/dist/es/standards-sdk.es8.js +80 -29
  423. package/dist/es/standards-sdk.es8.js.map +1 -1
  424. package/dist/es/standards-sdk.es80.js +8 -125
  425. package/dist/es/standards-sdk.es80.js.map +1 -1
  426. package/dist/es/standards-sdk.es81.js +45 -6
  427. package/dist/es/standards-sdk.es81.js.map +1 -1
  428. package/dist/es/standards-sdk.es82.js +98 -44
  429. package/dist/es/standards-sdk.es82.js.map +1 -1
  430. package/dist/es/standards-sdk.es83.js +331 -84
  431. package/dist/es/standards-sdk.es83.js.map +1 -1
  432. package/dist/es/standards-sdk.es84.js +93 -160
  433. package/dist/es/standards-sdk.es84.js.map +1 -1
  434. package/dist/es/standards-sdk.es85.js +55 -275
  435. package/dist/es/standards-sdk.es85.js.map +1 -1
  436. package/dist/es/standards-sdk.es86.js +43 -55
  437. package/dist/es/standards-sdk.es86.js.map +1 -1
  438. package/dist/es/standards-sdk.es87.js +145 -22
  439. package/dist/es/standards-sdk.es87.js.map +1 -1
  440. package/dist/es/standards-sdk.es88.js +34 -47
  441. package/dist/es/standards-sdk.es88.js.map +1 -1
  442. package/dist/es/standards-sdk.es89.js +22 -57
  443. package/dist/es/standards-sdk.es89.js.map +1 -1
  444. package/dist/es/standards-sdk.es9.js +104 -80
  445. package/dist/es/standards-sdk.es9.js.map +1 -1
  446. package/dist/es/standards-sdk.es90.js +23 -28
  447. package/dist/es/standards-sdk.es90.js.map +1 -1
  448. package/dist/es/standards-sdk.es91.js +238 -23
  449. package/dist/es/standards-sdk.es91.js.map +1 -1
  450. package/dist/es/standards-sdk.es92.js +265 -152
  451. package/dist/es/standards-sdk.es92.js.map +1 -1
  452. package/dist/es/standards-sdk.es93.js +95 -68
  453. package/dist/es/standards-sdk.es93.js.map +1 -1
  454. package/dist/es/standards-sdk.es94.js +124 -136
  455. package/dist/es/standards-sdk.es94.js.map +1 -1
  456. package/dist/es/standards-sdk.es95.js +42 -138
  457. package/dist/es/standards-sdk.es95.js.map +1 -1
  458. package/dist/es/standards-sdk.es96.js +259 -42
  459. package/dist/es/standards-sdk.es96.js.map +1 -1
  460. package/dist/es/standards-sdk.es97.js +82 -243
  461. package/dist/es/standards-sdk.es97.js.map +1 -1
  462. package/dist/es/standards-sdk.es98.js +48 -47
  463. package/dist/es/standards-sdk.es98.js.map +1 -1
  464. package/dist/es/standards-sdk.es99.js +29 -100
  465. package/dist/es/standards-sdk.es99.js.map +1 -1
  466. package/dist/es/utils/crypto-abstraction.d.ts.map +1 -1
  467. package/dist/es/utils/crypto-env.d.ts.map +1 -1
  468. package/dist/es/utils/dynamic-import.d.ts +5 -1
  469. package/dist/es/utils/dynamic-import.d.ts.map +1 -1
  470. package/dist/es/utils/hash-adapter.d.ts.map +1 -1
  471. package/package.json +16 -16
  472. package/dist/cjs/patches/topic-autorenew-patch.d.ts +0 -2
  473. package/dist/cjs/patches/topic-autorenew-patch.d.ts.map +0 -1
  474. package/dist/es/patches/topic-autorenew-patch.d.ts +0 -2
  475. package/dist/es/patches/topic-autorenew-patch.d.ts.map +0 -1
@@ -1,251 +1,355 @@
1
- class GutenbergBridge {
1
+ class TemplateEngine {
2
2
  constructor(logger) {
3
+ this.templateCache = /* @__PURE__ */ new Map();
4
+ this.helpers = /* @__PURE__ */ new Map();
5
+ this.compiledTemplates = /* @__PURE__ */ new Map();
3
6
  this.logger = logger;
7
+ this.setupBuiltinHelpers();
4
8
  }
5
9
  /**
6
- * Convert HashLinks BlockDefinition to Gutenberg block format
10
+ * Render a template with the given context
7
11
  */
8
- convertToGutenberg(blockDefinition) {
9
- this.logger.debug("Converting BlockDefinition to Gutenberg format", {
10
- name: blockDefinition.name
12
+ async render(template, context = {}) {
13
+ this.logger.debug("Rendering template", {
14
+ templateLength: template.length,
15
+ context: JSON.stringify(context, null, 2),
16
+ attributesType: context.attributes ? typeof context.attributes : "undefined",
17
+ contextKeys: Object.keys(context)
11
18
  });
12
- if (!blockDefinition || !blockDefinition.name) {
13
- throw new Error("Invalid block definition: missing name");
14
- }
15
- const gutenbergBlock = {
16
- apiVersion: blockDefinition.apiVersion,
17
- name: blockDefinition.name,
18
- title: blockDefinition.title,
19
- category: blockDefinition.category,
20
- icon: blockDefinition.icon,
21
- description: blockDefinition.description,
22
- keywords: blockDefinition.keywords,
23
- attributes: blockDefinition.attributes,
24
- supports: blockDefinition.supports
25
- };
26
- if (!gutenbergBlock.attributes) {
27
- gutenbergBlock.attributes = {};
28
- }
29
- if (!gutenbergBlock.supports) {
30
- gutenbergBlock.supports = {};
19
+ try {
20
+ const cacheKey = this.getCacheKey(template);
21
+ let compiled = this.templateCache.get(cacheKey);
22
+ if (!compiled) {
23
+ compiled = await this.compileTemplate(template);
24
+ this.templateCache.set(cacheKey, compiled);
25
+ }
26
+ const result = compiled.render(this.sanitizeContext(context));
27
+ this.logger.debug("Template rendered successfully", {
28
+ resultLength: result.length
29
+ });
30
+ return result;
31
+ } catch (error) {
32
+ this.logger.error("Template rendering failed", { error, template });
33
+ throw new Error(
34
+ `Template rendering failed: ${error instanceof Error ? error.message : "Unknown error"}`
35
+ );
31
36
  }
32
- this.logger.debug("Converted to Gutenberg format", {
33
- name: gutenbergBlock.name,
34
- attributeCount: Object.keys(gutenbergBlock.attributes).length
35
- });
36
- return gutenbergBlock;
37
37
  }
38
38
  /**
39
- * Parse Gutenberg block to HashLinks BlockDefinition format
39
+ * Precompile a template and store it with a name
40
40
  */
41
- parseFromGutenberg(gutenbergBlock) {
42
- this.logger.debug("Parsing Gutenberg block to BlockDefinition", {
43
- name: gutenbergBlock.name
41
+ async precompile(name, template) {
42
+ this.logger.debug("Precompiling template", {
43
+ name,
44
+ templateLength: template.length
44
45
  });
45
- if (!gutenbergBlock || !gutenbergBlock.name) {
46
- throw new Error("Invalid Gutenberg block: missing name");
46
+ try {
47
+ const compiled = await this.compileTemplate(template);
48
+ this.compiledTemplates.set(name, compiled);
49
+ this.logger.debug("Template precompiled successfully", { name });
50
+ } catch (error) {
51
+ this.logger.error("Template precompilation failed", { error, name });
52
+ throw new Error(
53
+ `Template precompilation failed: ${error instanceof Error ? error.message : "Unknown error"}`
54
+ );
55
+ }
56
+ }
57
+ /**
58
+ * Render a precompiled template
59
+ */
60
+ async renderCompiled(name, context = {}) {
61
+ const compiled = this.compiledTemplates.get(name);
62
+ if (!compiled) {
63
+ throw new Error(`Precompiled template '${name}' not found`);
47
64
  }
48
- if (!gutenbergBlock.title) {
49
- throw new Error("Invalid Gutenberg block: missing title");
65
+ this.logger.debug("Rendering precompiled template", { name });
66
+ try {
67
+ const result = compiled.render(this.sanitizeContext(context));
68
+ this.logger.debug("Precompiled template rendered successfully", { name });
69
+ return result;
70
+ } catch (error) {
71
+ this.logger.error("Precompiled template rendering failed", {
72
+ error,
73
+ name
74
+ });
75
+ throw new Error(
76
+ `Template rendering failed: ${error instanceof Error ? error.message : "Unknown error"}`
77
+ );
50
78
  }
51
- const blockDefinition = {
52
- apiVersion: gutenbergBlock.apiVersion || 3,
53
- name: gutenbergBlock.name,
54
- title: gutenbergBlock.title,
55
- category: gutenbergBlock.category || "common",
56
- template_t_id: "",
57
- icon: gutenbergBlock.icon,
58
- description: gutenbergBlock.description,
59
- keywords: gutenbergBlock.keywords,
60
- attributes: gutenbergBlock.attributes || {},
61
- supports: gutenbergBlock.supports || {}
79
+ }
80
+ /**
81
+ * Register a custom helper function
82
+ */
83
+ registerHelper(name, helper) {
84
+ this.helpers.set(name, helper);
85
+ this.logger.debug("Helper registered", { name });
86
+ }
87
+ /**
88
+ * Clear template cache
89
+ */
90
+ clearCache() {
91
+ this.templateCache.clear();
92
+ this.logger.debug("Template cache cleared");
93
+ }
94
+ /**
95
+ * Get cache size for testing
96
+ */
97
+ getCacheSize() {
98
+ return this.templateCache.size;
99
+ }
100
+ /**
101
+ * Compile a template string into executable function
102
+ */
103
+ async compileTemplate(template) {
104
+ this.validateTemplate(template);
105
+ const compiled = {
106
+ source: template,
107
+ compiled: true,
108
+ render: (context) => this.executeTemplate(template, context)
62
109
  };
63
- this.logger.debug("Parsed from Gutenberg format", {
64
- name: blockDefinition.name
65
- });
66
- return blockDefinition;
110
+ return compiled;
111
+ }
112
+ /**
113
+ * Execute template rendering logic
114
+ */
115
+ executeTemplate(template, context) {
116
+ let result = template;
117
+ result = this.processHelpers(result, context);
118
+ result = this.processLoops(result, context);
119
+ result = this.processConditionals(result, context);
120
+ result = this.processVariables(result, context);
121
+ return result;
67
122
  }
68
123
  /**
69
- * Validate block structure for Gutenberg compatibility
124
+ * Process conditional statements (if/unless/else)
70
125
  */
71
- validateBlockStructure(blockRegistration) {
72
- this.logger.debug("Validating block structure", {
73
- name: blockRegistration.name
126
+ processConditionals(template, context) {
127
+ let result = template;
128
+ const nestedIfElseRegex = /\{\{#if\s+([^}]+)\}\}((?:[^{]|\{(?!\{)|\{\{(?!#if|\{#else|\{\/if))*?)\{\{#if\s+([^}]+)\}\}((?:[^{]|\{(?!\{)|\{\{(?!#if|#else|\/if))*?)\{\{else\}\}((?:[^{]|\{(?!\{)|\{\{(?!#if|#else|\/if))*?)\{\{\/if\}\}((?:[^{]|\{(?!\{)|\{\{(?!\/if))*?)\{\{\/if\}\}/gs;
129
+ result = result.replace(
130
+ nestedIfElseRegex,
131
+ (match, outerCondition, beforeInner, innerCondition, innerTrue, innerFalse, afterInner) => {
132
+ const outerValue = this.evaluateCondition(outerCondition, context);
133
+ if (!outerValue) return "";
134
+ const innerValue = this.evaluateCondition(innerCondition, context);
135
+ const innerResult = innerValue ? innerTrue : innerFalse;
136
+ return beforeInner + innerResult + afterInner;
137
+ }
138
+ );
139
+ const ifElseRegex = /\{\{#if\s+([^}]+)\}\}((?:[^{]|\{(?!\{)|\{\{(?!else|\/if))*?)\{\{else\}\}((?:[^{]|\{(?!\{)|\{\{(?!\/if))*?)\{\{\/if\}\}/gs;
140
+ result = result.replace(
141
+ ifElseRegex,
142
+ (match, condition, trueBranch, falseBranch) => {
143
+ const conditionValue = this.evaluateCondition(condition, context);
144
+ return conditionValue ? trueBranch : falseBranch;
145
+ }
146
+ );
147
+ const ifRegex = /\{\{#if\s+([^}]+)\}\}((?:[^{]|\{(?!\{)|\{\{(?!\/if))*?)\{\{\/if\}\}/gs;
148
+ result = result.replace(ifRegex, (match, condition, content) => {
149
+ const conditionValue = this.evaluateCondition(condition, context);
150
+ return conditionValue ? content : "";
74
151
  });
75
- const result = {
76
- isValid: true,
77
- errors: [],
78
- warnings: []
79
- };
80
- this.validateBasicStructure(blockRegistration, result);
81
- this.validateBlockName(blockRegistration, result);
82
- this.validateAttributes(blockRegistration, result);
83
- this.validateSupports(blockRegistration, result);
84
- this.validateParentChild(blockRegistration, result);
85
- result.isValid = result.errors.filter(
86
- (e) => e.severity === "critical" || e.severity === "high"
87
- ).length === 0;
88
- this.logger.debug("Block structure validation completed", {
89
- name: blockRegistration.name,
90
- isValid: result.isValid,
91
- errorCount: result.errors.length,
92
- warningCount: result.warnings.length
152
+ const unlessRegex = /\{\{#unless\s+([^}]+)\}\}((?:[^{]|\{(?!\{)|\{\{(?!\/unless))*?)\{\{\/unless\}\}/gs;
153
+ result = result.replace(unlessRegex, (match, condition, content) => {
154
+ const conditionValue = this.evaluateCondition(condition, context);
155
+ return !conditionValue ? content : "";
93
156
  });
94
157
  return result;
95
158
  }
96
159
  /**
97
- * Validate basic block structure
160
+ * Process loop statements (each)
98
161
  */
99
- validateBasicStructure(blockRegistration, result) {
100
- if (!blockRegistration.name || blockRegistration.name.trim() === "") {
101
- result.errors.push({
102
- code: "MISSING_NAME",
103
- message: "Block name cannot be empty",
104
- field: "name",
105
- severity: "critical"
106
- });
107
- }
108
- if (blockRegistration) {
109
- if (!blockRegistration.title) {
110
- result.errors.push({
111
- code: "MISSING_TITLE",
112
- message: "Block title is required",
113
- field: "data.title",
114
- severity: "high"
162
+ processLoops(template, context) {
163
+ let result = template;
164
+ const eachRegex = /\{\{#each\s+([^}]+)\}\}(.*?)\{\{\/each\}\}/gs;
165
+ result = result.replace(eachRegex, (match, variable, content) => {
166
+ const items = this.getNestedValue(variable, context);
167
+ if (!items) return "";
168
+ let loopResult = "";
169
+ if (Array.isArray(items)) {
170
+ items.forEach((item, index) => {
171
+ let itemContent = content;
172
+ itemContent = itemContent.replace(
173
+ /\{\{this\}\}/g,
174
+ this.escapeHtml(String(item))
175
+ );
176
+ itemContent = itemContent.replace(/\{\{@index\}\}/g, String(index));
177
+ if (typeof item === "object" && item !== null) {
178
+ for (const [key, value] of Object.entries(item)) {
179
+ const regex = new RegExp(`\\{\\{${key}\\}\\}`, "g");
180
+ itemContent = itemContent.replace(
181
+ regex,
182
+ this.escapeHtml(String(value))
183
+ );
184
+ }
185
+ }
186
+ itemContent = itemContent.replace(
187
+ /\{\{\.\.\/([^}]+)\}\}/g,
188
+ (parentMatch, parentPath) => {
189
+ const parentValue = this.getNestedValue(parentPath, context);
190
+ return this.escapeHtml(String(parentValue || ""));
191
+ }
192
+ );
193
+ loopResult += itemContent;
115
194
  });
195
+ } else if (typeof items === "object") {
196
+ for (const [key, value] of Object.entries(items)) {
197
+ let itemContent = content;
198
+ itemContent = itemContent.replace(
199
+ /\{\{@key\}\}/g,
200
+ this.escapeHtml(key)
201
+ );
202
+ itemContent = itemContent.replace(
203
+ /\{\{this\}\}/g,
204
+ this.escapeHtml(String(value))
205
+ );
206
+ loopResult += itemContent;
207
+ }
116
208
  }
117
- if (!blockRegistration.description) {
118
- result.warnings.push({
119
- code: "MISSING_DESCRIPTION",
120
- message: "Block description improves usability",
121
- field: "data.description",
122
- impact: "usability"
123
- });
209
+ return loopResult;
210
+ });
211
+ return result;
212
+ }
213
+ /**
214
+ * Process variable substitutions
215
+ */
216
+ processVariables(template, context) {
217
+ let result = template;
218
+ const tripleRegex = /\{\{\{([^}]+)\}\}\}/g;
219
+ result = result.replace(tripleRegex, (match, variable) => {
220
+ const value = this.getNestedValue(variable.trim(), context);
221
+ return this.sanitizeHtml(String(value || ""));
222
+ });
223
+ const doubleRegex = /\{\{([^}#/]+)\}\}/g;
224
+ result = result.replace(doubleRegex, (match, variable) => {
225
+ const trimmed = variable.trim();
226
+ if (trimmed.startsWith("#") || trimmed.startsWith("/") || trimmed.startsWith("else")) {
227
+ return match;
124
228
  }
125
- }
126
- if (!blockRegistration) {
127
- result.errors.push({
128
- code: "MISSING_BLOCK_JSON",
129
- message: "data is required for Gutenberg compatibility",
130
- field: "data",
131
- severity: "critical"
132
- });
133
- }
229
+ const value = this.getNestedValue(trimmed, context);
230
+ if (value === 0 || value === false) {
231
+ return this.escapeHtml(String(value));
232
+ }
233
+ return this.escapeHtml(String(value || ""));
234
+ });
235
+ return result;
134
236
  }
135
237
  /**
136
- * Validate block name format
238
+ * Process helper functions
137
239
  */
138
- validateBlockName(blockRegistration, result) {
139
- if (!blockRegistration.name) return;
140
- const namePattern = /^[a-z0-9-]+\/[a-z0-9-]+$/;
141
- if (!namePattern.test(blockRegistration.name)) {
142
- result.errors.push({
143
- code: "INVALID_BLOCK_NAME",
144
- message: "Block name must follow namespace/block-name format (lowercase, hyphens only)",
145
- field: "name",
146
- severity: "high"
147
- });
148
- }
149
- if (blockRegistration && blockRegistration.name) {
150
- result.warnings.push({
151
- code: "NAME_MISMATCH",
152
- message: "Block name should match data.name",
153
- field: "name",
154
- impact: "functionality"
240
+ processHelpers(template, context) {
241
+ let result = template;
242
+ const withRegex = /\{\{#with\s+([^}]+)\}\}(.*?)\{\{\/with\}\}/gs;
243
+ result = result.replace(withRegex, (match, variable, content) => {
244
+ const newContext = this.getNestedValue(variable.trim(), context);
245
+ if (!newContext) return "";
246
+ return this.executeTemplate(content, newContext);
247
+ });
248
+ for (const [helperName, helperFunc] of this.helpers) {
249
+ const helperRegex = new RegExp(
250
+ `\\{\\{${helperName}\\s+([^}]+)\\}\\}`,
251
+ "g"
252
+ );
253
+ result = result.replace(helperRegex, (match, args) => {
254
+ try {
255
+ const argValue = this.getNestedValue(args.trim(), context);
256
+ return this.escapeHtml(helperFunc.call(context, argValue));
257
+ } catch (error) {
258
+ this.logger.warn("Helper execution failed", { helperName, error });
259
+ return "";
260
+ }
155
261
  });
156
262
  }
263
+ return result;
157
264
  }
158
265
  /**
159
- * Validate block attributes
266
+ * Evaluate condition for if/unless statements
160
267
  */
161
- validateAttributes(blockRegistration, result) {
162
- if (!blockRegistration || !blockRegistration.attributes) return;
163
- const attributes = blockRegistration.attributes;
164
- const validTypes = ["string", "number", "boolean", "array", "object"];
165
- for (const [attrName, attrDef] of Object.entries(attributes)) {
166
- if (!attrDef.type) {
167
- result.errors.push({
168
- code: "MISSING_ATTRIBUTE_TYPE",
169
- message: `Attribute '${attrName}' must specify a type`,
170
- field: `attributes.${attrName}.type`,
171
- severity: "medium"
172
- });
173
- continue;
174
- }
175
- if (!validTypes.includes(attrDef.type)) {
176
- result.errors.push({
177
- code: "INVALID_ATTRIBUTE_TYPE",
178
- message: `Attribute '${attrName}' has invalid type '${attrDef.type}'`,
179
- field: `attributes.${attrName}.type`,
180
- severity: "high"
181
- });
182
- }
183
- if (attrDef.enum && attrDef.default && !attrDef.enum.includes(attrDef.default)) {
184
- result.warnings.push({
185
- code: "DEFAULT_NOT_IN_ENUM",
186
- message: `Attribute '${attrName}' default value not in enum`,
187
- field: `attributes.${attrName}.default`,
188
- impact: "functionality"
189
- });
268
+ evaluateCondition(condition, context) {
269
+ const value = this.getNestedValue(condition.trim(), context);
270
+ return Boolean(value);
271
+ }
272
+ /**
273
+ * Get nested value from context using dot notation
274
+ */
275
+ getNestedValue(path, context) {
276
+ if (!path || !context) return void 0;
277
+ const keys = path.split(".");
278
+ let current = context;
279
+ for (const key of keys) {
280
+ if (current === null || current === void 0 || typeof current !== "object") {
281
+ return void 0;
190
282
  }
283
+ current = current[key];
191
284
  }
285
+ return current;
192
286
  }
193
287
  /**
194
- * Validate block supports
195
- */
196
- validateSupports(blockRegistration, result) {
197
- if (!blockRegistration || !blockRegistration.supports) return;
198
- const supports = blockRegistration.supports;
199
- if (supports.align !== void 0) {
200
- if (typeof supports.align === "boolean") ;
201
- else if (Array.isArray(supports.align)) {
202
- const validAlignments = ["left", "center", "right", "wide", "full"];
203
- const invalidAlignments = supports.align.filter(
204
- (align) => !validAlignments.includes(align)
205
- );
206
- if (invalidAlignments.length > 0) {
207
- result.warnings.push({
208
- code: "INVALID_ALIGNMENT",
209
- message: `Invalid alignment values: ${invalidAlignments.join(", ")}`,
210
- field: "supports.align",
211
- impact: "functionality"
212
- });
213
- }
288
+ * Sanitize context to prevent XSS
289
+ */
290
+ sanitizeContext(context) {
291
+ if (context === null || context === void 0) return context;
292
+ const seen = /* @__PURE__ */ new WeakSet();
293
+ const sanitize = (obj) => {
294
+ if (obj === null || typeof obj !== "object") return obj;
295
+ if (seen.has(obj)) return "[Circular]";
296
+ seen.add(obj);
297
+ if (Array.isArray(obj)) {
298
+ return obj.map(sanitize);
214
299
  }
215
- }
300
+ const sanitized = {};
301
+ for (const [key, value] of Object.entries(obj)) {
302
+ sanitized[key] = sanitize(value);
303
+ }
304
+ return sanitized;
305
+ };
306
+ return sanitize(context);
216
307
  }
217
308
  /**
218
- * Validate parent/child relationships
309
+ * Escape HTML to prevent XSS
219
310
  */
220
- validateParentChild(blockRegistration, result) {
221
- if (!blockRegistration) return;
222
- if (blockRegistration.parent) {
223
- result.warnings.push({
224
- code: "REQUIRES_PARENT",
225
- message: "Block requires a specific parent block",
226
- field: "parent",
227
- impact: "usability"
228
- });
311
+ escapeHtml(text) {
312
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
313
+ }
314
+ /**
315
+ * Sanitize HTML to allow safe tags only
316
+ */
317
+ sanitizeHtml(html) {
318
+ return html.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "").replace(/javascript:/gi, "").replace(/on\w+\s*=/gi, "");
319
+ }
320
+ /**
321
+ * Validate template syntax
322
+ */
323
+ validateTemplate(template) {
324
+ const openBlocks = (template.match(/\{\{#\w+/g) || []).length;
325
+ const closeBlocks = (template.match(/\{\{\/\w+/g) || []).length;
326
+ if (openBlocks !== closeBlocks) {
327
+ throw new Error("Invalid template syntax: unclosed block helpers");
229
328
  }
230
- if (blockRegistration.provides && Object.keys(blockRegistration.provides).length > 0) {
231
- result.warnings.push({
232
- code: "PROVIDES_CONTEXT",
233
- message: "Block provides context to child blocks",
234
- field: "provides",
235
- impact: "functionality"
236
- });
329
+ const malformed = /\{\{[^}]*$|\{\{[^}]*\{\{/.test(template);
330
+ if (malformed) {
331
+ throw new Error("Invalid template syntax: malformed handlebars");
237
332
  }
238
- if (blockRegistration.usesContext && blockRegistration.usesContext.length > 0) {
239
- result.warnings.push({
240
- code: "USES_CONTEXT",
241
- message: "Block depends on context from parent blocks",
242
- field: "usesContext",
243
- impact: "functionality"
244
- });
333
+ }
334
+ /**
335
+ * Generate cache key for template
336
+ */
337
+ getCacheKey(template) {
338
+ let hash = 0;
339
+ for (let i = 0; i < template.length; i++) {
340
+ const char = template.charCodeAt(i);
341
+ hash = (hash << 5) - hash + char;
342
+ hash = hash & hash;
245
343
  }
344
+ return hash.toString();
345
+ }
346
+ /**
347
+ * Setup builtin helper functions
348
+ */
349
+ setupBuiltinHelpers() {
246
350
  }
247
351
  }
248
352
  export {
249
- GutenbergBridge
353
+ TemplateEngine
250
354
  };
251
355
  //# sourceMappingURL=standards-sdk.es45.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"standards-sdk.es45.js","sources":["../../src/hcs-12/rendering/gutenberg-bridge.ts"],"sourcesContent":["/**\n * Gutenberg Bridge for HCS-12 HashLinks\n *\n * Provides conversion between HashLinks block definitions and WordPress\n * Gutenberg block format, enabling seamless integration with Gutenberg editors.\n */\n\nimport { Logger } from '../../utils/logger';\nimport {\n BlockDefinition,\n GutenbergBlockType,\n BlockAttribute,\n BlockSupports,\n} from '../types';\n\nexport interface GutenbergValidationResult {\n isValid: boolean;\n errors: GutenbergValidationError[];\n warnings: ValidationWarning[];\n}\n\nexport interface GutenbergValidationError {\n code: string;\n message: string;\n field?: string;\n severity: 'critical' | 'high' | 'medium' | 'low';\n}\n\nexport interface ValidationWarning {\n code: string;\n message: string;\n field?: string;\n impact: 'functionality' | 'usability' | 'performance';\n}\n\n/**\n * Bridge between HashLinks and Gutenberg block formats\n */\nexport class GutenbergBridge {\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Convert HashLinks BlockDefinition to Gutenberg block format\n */\n convertToGutenberg(blockDefinition: BlockDefinition): GutenbergBlockType {\n this.logger.debug('Converting BlockDefinition to Gutenberg format', {\n name: blockDefinition.name,\n });\n\n if (!blockDefinition || !blockDefinition.name) {\n throw new Error('Invalid block definition: missing name');\n }\n\n const gutenbergBlock: GutenbergBlockType = {\n apiVersion: blockDefinition.apiVersion,\n name: blockDefinition.name,\n title: blockDefinition.title,\n category: blockDefinition.category,\n icon: blockDefinition.icon,\n description: blockDefinition.description,\n keywords: blockDefinition.keywords,\n attributes: blockDefinition.attributes,\n supports: blockDefinition.supports,\n };\n\n if (!gutenbergBlock.attributes) {\n gutenbergBlock.attributes = {};\n }\n\n if (!gutenbergBlock.supports) {\n gutenbergBlock.supports = {};\n }\n\n this.logger.debug('Converted to Gutenberg format', {\n name: gutenbergBlock.name,\n attributeCount: Object.keys(gutenbergBlock.attributes).length,\n });\n\n return gutenbergBlock;\n }\n\n /**\n * Parse Gutenberg block to HashLinks BlockDefinition format\n */\n parseFromGutenberg(gutenbergBlock: GutenbergBlockType): BlockDefinition {\n this.logger.debug('Parsing Gutenberg block to BlockDefinition', {\n name: gutenbergBlock.name,\n });\n\n if (!gutenbergBlock || !gutenbergBlock.name) {\n throw new Error('Invalid Gutenberg block: missing name');\n }\n\n if (!gutenbergBlock.title) {\n throw new Error('Invalid Gutenberg block: missing title');\n }\n\n const blockDefinition: BlockDefinition = {\n apiVersion: gutenbergBlock.apiVersion || 3,\n name: gutenbergBlock.name,\n title: gutenbergBlock.title,\n category: gutenbergBlock.category || 'common',\n template_t_id: '',\n icon: gutenbergBlock.icon,\n description: gutenbergBlock.description,\n keywords: gutenbergBlock.keywords,\n attributes: gutenbergBlock.attributes || {},\n supports: gutenbergBlock.supports || {},\n };\n\n this.logger.debug('Parsed from Gutenberg format', {\n name: blockDefinition.name,\n });\n\n return blockDefinition;\n }\n\n /**\n * Validate block structure for Gutenberg compatibility\n */\n validateBlockStructure(\n blockRegistration: BlockDefinition,\n ): GutenbergValidationResult {\n this.logger.debug('Validating block structure', {\n name: blockRegistration.name,\n });\n\n const result: GutenbergValidationResult = {\n isValid: true,\n errors: [],\n warnings: [],\n };\n\n this.validateBasicStructure(blockRegistration, result);\n\n this.validateBlockName(blockRegistration, result);\n\n this.validateAttributes(blockRegistration, result);\n\n this.validateSupports(blockRegistration, result);\n\n this.validateParentChild(blockRegistration, result);\n\n result.isValid =\n result.errors.filter(\n e => e.severity === 'critical' || e.severity === 'high',\n ).length === 0;\n\n this.logger.debug('Block structure validation completed', {\n name: blockRegistration.name,\n isValid: result.isValid,\n errorCount: result.errors.length,\n warningCount: result.warnings.length,\n });\n\n return result;\n }\n\n /**\n * Validate basic block structure\n */\n private validateBasicStructure(\n blockRegistration: BlockDefinition,\n result: GutenbergValidationResult,\n ): void {\n if (!blockRegistration.name || blockRegistration.name.trim() === '') {\n result.errors.push({\n code: 'MISSING_NAME',\n message: 'Block name cannot be empty',\n field: 'name',\n severity: 'critical',\n });\n }\n\n if (blockRegistration) {\n if (!blockRegistration.title) {\n result.errors.push({\n code: 'MISSING_TITLE',\n message: 'Block title is required',\n field: 'data.title',\n severity: 'high',\n });\n }\n\n if (!blockRegistration.description) {\n result.warnings.push({\n code: 'MISSING_DESCRIPTION',\n message: 'Block description improves usability',\n field: 'data.description',\n impact: 'usability',\n });\n }\n }\n\n if (!blockRegistration) {\n result.errors.push({\n code: 'MISSING_BLOCK_JSON',\n message: 'data is required for Gutenberg compatibility',\n field: 'data',\n severity: 'critical',\n });\n }\n }\n\n /**\n * Validate block name format\n */\n private validateBlockName(\n blockRegistration: BlockDefinition,\n result: GutenbergValidationResult,\n ): void {\n if (!blockRegistration.name) return;\n\n const namePattern = /^[a-z0-9-]+\\/[a-z0-9-]+$/;\n if (!namePattern.test(blockRegistration.name)) {\n result.errors.push({\n code: 'INVALID_BLOCK_NAME',\n message:\n 'Block name must follow namespace/block-name format (lowercase, hyphens only)',\n field: 'name',\n severity: 'high',\n });\n }\n\n if (blockRegistration && blockRegistration.name) {\n result.warnings.push({\n code: 'NAME_MISMATCH',\n message: 'Block name should match data.name',\n field: 'name',\n impact: 'functionality',\n });\n }\n }\n\n /**\n * Validate block attributes\n */\n private validateAttributes(\n blockRegistration: BlockDefinition,\n result: GutenbergValidationResult,\n ): void {\n if (!blockRegistration || !blockRegistration.attributes) return;\n\n const attributes = blockRegistration.attributes;\n const validTypes = ['string', 'number', 'boolean', 'array', 'object'];\n\n for (const [attrName, attrDef] of Object.entries(attributes)) {\n if (!attrDef.type) {\n result.errors.push({\n code: 'MISSING_ATTRIBUTE_TYPE',\n message: `Attribute '${attrName}' must specify a type`,\n field: `attributes.${attrName}.type`,\n severity: 'medium',\n });\n continue;\n }\n\n if (!validTypes.includes(attrDef.type)) {\n result.errors.push({\n code: 'INVALID_ATTRIBUTE_TYPE',\n message: `Attribute '${attrName}' has invalid type '${attrDef.type}'`,\n field: `attributes.${attrName}.type`,\n severity: 'high',\n });\n }\n\n if (\n attrDef.enum &&\n attrDef.default &&\n !attrDef.enum.includes(attrDef.default)\n ) {\n result.warnings.push({\n code: 'DEFAULT_NOT_IN_ENUM',\n message: `Attribute '${attrName}' default value not in enum`,\n field: `attributes.${attrName}.default`,\n impact: 'functionality',\n });\n }\n }\n }\n\n /**\n * Validate block supports\n */\n private validateSupports(\n blockRegistration: BlockDefinition,\n result: GutenbergValidationResult,\n ): void {\n if (!blockRegistration || !blockRegistration.supports) return;\n\n const supports = blockRegistration.supports;\n\n if (supports.align !== undefined) {\n if (typeof supports.align === 'boolean') {\n } else if (Array.isArray(supports.align)) {\n const validAlignments = ['left', 'center', 'right', 'wide', 'full'];\n const invalidAlignments = supports.align.filter(\n align => !validAlignments.includes(align),\n );\n if (invalidAlignments.length > 0) {\n result.warnings.push({\n code: 'INVALID_ALIGNMENT',\n message: `Invalid alignment values: ${invalidAlignments.join(', ')}`,\n field: 'supports.align',\n impact: 'functionality',\n });\n }\n }\n }\n }\n\n /**\n * Validate parent/child relationships\n */\n private validateParentChild(\n blockRegistration: BlockDefinition,\n result: GutenbergValidationResult,\n ): void {\n if (!blockRegistration) return;\n\n if (blockRegistration.parent) {\n result.warnings.push({\n code: 'REQUIRES_PARENT',\n message: 'Block requires a specific parent block',\n field: 'parent',\n impact: 'usability',\n });\n }\n\n if (\n blockRegistration.provides &&\n Object.keys(blockRegistration.provides).length > 0\n ) {\n result.warnings.push({\n code: 'PROVIDES_CONTEXT',\n message: 'Block provides context to child blocks',\n field: 'provides',\n impact: 'functionality',\n });\n }\n\n if (\n blockRegistration.usesContext &&\n blockRegistration.usesContext.length > 0\n ) {\n result.warnings.push({\n code: 'USES_CONTEXT',\n message: 'Block depends on context from parent blocks',\n field: 'usesContext',\n impact: 'functionality',\n });\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"standards-sdk.es45.js","sources":["../../src/hcs-12/rendering/template-engine.ts"],"sourcesContent":["/**\n * Template Engine for HCS-12 HashLinks\n *\n * Handlebars-compatible template engine for rendering HashLinks blocks\n * with XSS protection and caching support.\n */\n\nimport { Logger } from '../../utils/logger';\n\nexport interface TemplateContext {\n attributes?: Record<string, string | number | boolean>;\n actions?:\n | Array<{\n name: string;\n result?: unknown;\n }>\n | Record<string, string>;\n [key: string]: unknown;\n}\n\nexport interface CompiledTemplate {\n render(context: TemplateContext): string;\n source: string;\n compiled: boolean;\n}\n\nexport interface HelperFunction {\n (this: unknown, ...args: unknown[]): string;\n}\n\n/**\n * Handlebars-compatible template engine\n */\nexport class TemplateEngine {\n private logger: Logger;\n private templateCache: Map<string, CompiledTemplate> = new Map();\n private helpers: Map<string, HelperFunction> = new Map();\n private compiledTemplates: Map<string, CompiledTemplate> = new Map();\n\n constructor(logger: Logger) {\n this.logger = logger;\n this.setupBuiltinHelpers();\n }\n\n /**\n * Render a template with the given context\n */\n async render(\n template: string,\n context: TemplateContext = {},\n ): Promise<string> {\n this.logger.debug('Rendering template', {\n templateLength: template.length,\n context: JSON.stringify(context, null, 2),\n attributesType: context.attributes\n ? typeof context.attributes\n : 'undefined',\n contextKeys: Object.keys(context),\n });\n\n try {\n const cacheKey = this.getCacheKey(template);\n let compiled = this.templateCache.get(cacheKey);\n\n if (!compiled) {\n compiled = await this.compileTemplate(template);\n this.templateCache.set(cacheKey, compiled);\n }\n\n const result = compiled.render(this.sanitizeContext(context));\n\n this.logger.debug('Template rendered successfully', {\n resultLength: result.length,\n });\n\n return result;\n } catch (error) {\n this.logger.error('Template rendering failed', { error, template });\n throw new Error(\n `Template rendering failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n }\n\n /**\n * Precompile a template and store it with a name\n */\n async precompile(name: string, template: string): Promise<void> {\n this.logger.debug('Precompiling template', {\n name,\n templateLength: template.length,\n });\n\n try {\n const compiled = await this.compileTemplate(template);\n this.compiledTemplates.set(name, compiled);\n\n this.logger.debug('Template precompiled successfully', { name });\n } catch (error) {\n this.logger.error('Template precompilation failed', { error, name });\n throw new Error(\n `Template precompilation failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n }\n\n /**\n * Render a precompiled template\n */\n async renderCompiled(\n name: string,\n context: TemplateContext = {},\n ): Promise<string> {\n const compiled = this.compiledTemplates.get(name);\n if (!compiled) {\n throw new Error(`Precompiled template '${name}' not found`);\n }\n\n this.logger.debug('Rendering precompiled template', { name });\n\n try {\n const result = compiled.render(this.sanitizeContext(context));\n\n this.logger.debug('Precompiled template rendered successfully', { name });\n return result;\n } catch (error) {\n this.logger.error('Precompiled template rendering failed', {\n error,\n name,\n });\n throw new Error(\n `Template rendering failed: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n }\n\n /**\n * Register a custom helper function\n */\n registerHelper(name: string, helper: HelperFunction): void {\n this.helpers.set(name, helper);\n this.logger.debug('Helper registered', { name });\n }\n\n /**\n * Clear template cache\n */\n clearCache(): void {\n this.templateCache.clear();\n this.logger.debug('Template cache cleared');\n }\n\n /**\n * Get cache size for testing\n */\n getCacheSize(): number {\n return this.templateCache.size;\n }\n\n /**\n * Compile a template string into executable function\n */\n private async compileTemplate(template: string): Promise<CompiledTemplate> {\n this.validateTemplate(template);\n\n const compiled: CompiledTemplate = {\n source: template,\n compiled: true,\n render: (context: TemplateContext) =>\n this.executeTemplate(template, context),\n };\n\n return compiled;\n }\n\n /**\n * Execute template rendering logic\n */\n private executeTemplate(template: string, context: TemplateContext): string {\n let result = template;\n\n result = this.processHelpers(result, context);\n result = this.processLoops(result, context);\n result = this.processConditionals(result, context);\n result = this.processVariables(result, context);\n\n return result;\n }\n\n /**\n * Process conditional statements (if/unless/else)\n */\n private processConditionals(\n template: string,\n context: TemplateContext,\n ): string {\n let result = template;\n\n const nestedIfElseRegex =\n /\\{\\{#if\\s+([^}]+)\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!#if|\\{#else|\\{\\/if))*?)\\{\\{#if\\s+([^}]+)\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!#if|#else|\\/if))*?)\\{\\{else\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!#if|#else|\\/if))*?)\\{\\{\\/if\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!\\/if))*?)\\{\\{\\/if\\}\\}/gs;\n result = result.replace(\n nestedIfElseRegex,\n (\n match,\n outerCondition,\n beforeInner,\n innerCondition,\n innerTrue,\n innerFalse,\n afterInner,\n ) => {\n const outerValue = this.evaluateCondition(outerCondition, context);\n if (!outerValue) return '';\n\n const innerValue = this.evaluateCondition(innerCondition, context);\n const innerResult = innerValue ? innerTrue : innerFalse;\n\n return beforeInner + innerResult + afterInner;\n },\n );\n\n const ifElseRegex =\n /\\{\\{#if\\s+([^}]+)\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!else|\\/if))*?)\\{\\{else\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!\\/if))*?)\\{\\{\\/if\\}\\}/gs;\n result = result.replace(\n ifElseRegex,\n (match, condition, trueBranch, falseBranch) => {\n const conditionValue = this.evaluateCondition(condition, context);\n return conditionValue ? trueBranch : falseBranch;\n },\n );\n\n const ifRegex =\n /\\{\\{#if\\s+([^}]+)\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!\\/if))*?)\\{\\{\\/if\\}\\}/gs;\n result = result.replace(ifRegex, (match, condition, content) => {\n const conditionValue = this.evaluateCondition(condition, context);\n return conditionValue ? content : '';\n });\n\n const unlessRegex =\n /\\{\\{#unless\\s+([^}]+)\\}\\}((?:[^{]|\\{(?!\\{)|\\{\\{(?!\\/unless))*?)\\{\\{\\/unless\\}\\}/gs;\n result = result.replace(unlessRegex, (match, condition, content) => {\n const conditionValue = this.evaluateCondition(condition, context);\n return !conditionValue ? content : '';\n });\n\n return result;\n }\n\n /**\n * Process loop statements (each)\n */\n private processLoops(template: string, context: TemplateContext): string {\n let result = template;\n\n const eachRegex = /\\{\\{#each\\s+([^}]+)\\}\\}(.*?)\\{\\{\\/each\\}\\}/gs;\n result = result.replace(eachRegex, (match, variable, content) => {\n const items = this.getNestedValue(variable, context);\n\n if (!items) return '';\n\n let loopResult = '';\n\n if (Array.isArray(items)) {\n items.forEach((item, index) => {\n let itemContent = content;\n\n itemContent = itemContent.replace(\n /\\{\\{this\\}\\}/g,\n this.escapeHtml(String(item)),\n );\n\n itemContent = itemContent.replace(/\\{\\{@index\\}\\}/g, String(index));\n\n if (typeof item === 'object' && item !== null) {\n for (const [key, value] of Object.entries(item)) {\n const regex = new RegExp(`\\\\{\\\\{${key}\\\\}\\\\}`, 'g');\n itemContent = itemContent.replace(\n regex,\n this.escapeHtml(String(value)),\n );\n }\n }\n\n itemContent = itemContent.replace(\n /\\{\\{\\.\\.\\/([^}]+)\\}\\}/g,\n (parentMatch: string, parentPath: string) => {\n const parentValue = this.getNestedValue(parentPath, context);\n return this.escapeHtml(String(parentValue || ''));\n },\n );\n\n loopResult += itemContent;\n });\n } else if (typeof items === 'object') {\n for (const [key, value] of Object.entries(items)) {\n let itemContent = content;\n\n itemContent = itemContent.replace(\n /\\{\\{@key\\}\\}/g,\n this.escapeHtml(key),\n );\n\n itemContent = itemContent.replace(\n /\\{\\{this\\}\\}/g,\n this.escapeHtml(String(value)),\n );\n\n loopResult += itemContent;\n }\n }\n\n return loopResult;\n });\n\n return result;\n }\n\n /**\n * Process variable substitutions\n */\n private processVariables(template: string, context: TemplateContext): string {\n let result = template;\n\n const tripleRegex = /\\{\\{\\{([^}]+)\\}\\}\\}/g;\n result = result.replace(tripleRegex, (match, variable) => {\n const value = this.getNestedValue(variable.trim(), context);\n return this.sanitizeHtml(String(value || ''));\n });\n\n const doubleRegex = /\\{\\{([^}#/]+)\\}\\}/g;\n result = result.replace(doubleRegex, (match, variable) => {\n const trimmed = variable.trim();\n\n if (\n trimmed.startsWith('#') ||\n trimmed.startsWith('/') ||\n trimmed.startsWith('else')\n ) {\n return match;\n }\n\n const value = this.getNestedValue(trimmed, context);\n\n if (value === 0 || value === false) {\n return this.escapeHtml(String(value));\n }\n return this.escapeHtml(String(value || ''));\n });\n\n return result;\n }\n\n /**\n * Process helper functions\n */\n private processHelpers(template: string, context: TemplateContext): string {\n let result = template;\n\n const withRegex = /\\{\\{#with\\s+([^}]+)\\}\\}(.*?)\\{\\{\\/with\\}\\}/gs;\n result = result.replace(withRegex, (match, variable, content) => {\n const newContext = this.getNestedValue(variable.trim(), context);\n if (!newContext) return '';\n\n return this.executeTemplate(content, newContext as TemplateContext);\n });\n\n for (const [helperName, helperFunc] of this.helpers) {\n const helperRegex = new RegExp(\n `\\\\{\\\\{${helperName}\\\\s+([^}]+)\\\\}\\\\}`,\n 'g',\n );\n result = result.replace(helperRegex, (match, args) => {\n try {\n const argValue = this.getNestedValue(args.trim(), context);\n return this.escapeHtml(helperFunc.call(context, argValue));\n } catch (error) {\n this.logger.warn('Helper execution failed', { helperName, error });\n return '';\n }\n });\n }\n\n return result;\n }\n\n /**\n * Evaluate condition for if/unless statements\n */\n private evaluateCondition(\n condition: string,\n context: TemplateContext,\n ): boolean {\n const value = this.getNestedValue(condition.trim(), context);\n return Boolean(value);\n }\n\n /**\n * Get nested value from context using dot notation\n */\n private getNestedValue(path: string, context: TemplateContext): unknown {\n if (!path || !context) return undefined;\n\n const keys = path.split('.');\n let current: unknown = context;\n\n for (const key of keys) {\n if (\n current === null ||\n current === undefined ||\n typeof current !== 'object'\n ) {\n return undefined;\n }\n current = (current as Record<string, unknown>)[key];\n }\n\n return current;\n }\n\n /**\n * Sanitize context to prevent XSS\n */\n private sanitizeContext(context: TemplateContext): TemplateContext {\n if (context === null || context === undefined) return context;\n\n const seen = new WeakSet();\n\n const sanitize = (obj: unknown): unknown => {\n if (obj === null || typeof obj !== 'object') return obj;\n if (seen.has(obj)) return '[Circular]';\n\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n return obj.map(sanitize);\n }\n\n const sanitized: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj)) {\n sanitized[key] = sanitize(value);\n }\n\n return sanitized;\n };\n\n return sanitize(context) as TemplateContext;\n }\n\n /**\n * Escape HTML to prevent XSS\n */\n private escapeHtml(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n }\n\n /**\n * Sanitize HTML to allow safe tags only\n */\n private sanitizeHtml(html: string): string {\n return html\n .replace(/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi, '')\n .replace(/javascript:/gi, '')\n .replace(/on\\w+\\s*=/gi, '');\n }\n\n /**\n * Validate template syntax\n */\n private validateTemplate(template: string): void {\n const openBlocks = (template.match(/\\{\\{#\\w+/g) || []).length;\n const closeBlocks = (template.match(/\\{\\{\\/\\w+/g) || []).length;\n\n if (openBlocks !== closeBlocks) {\n throw new Error('Invalid template syntax: unclosed block helpers');\n }\n\n const malformed = /\\{\\{[^}]*$|\\{\\{[^}]*\\{\\{/.test(template);\n if (malformed) {\n throw new Error('Invalid template syntax: malformed handlebars');\n }\n }\n\n /**\n * Generate cache key for template\n */\n private getCacheKey(template: string): string {\n let hash = 0;\n for (let i = 0; i < template.length; i++) {\n const char = template.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return hash.toString();\n }\n\n /**\n * Setup builtin helper functions\n */\n private setupBuiltinHelpers(): void {}\n}\n"],"names":[],"mappings":"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"}